shell脚本学习一(笔记

#环境要求:
操作系统:
RHEL7.X或者Centos7.x
1.最小化安装
2.配置好固定的IP地址,能够访问互联网
3.配置好yum源
>1本地光盘
挂载光盘,开机自动挂载
vim +/etc/fstab
/dev/sr0 /meida/cdrom iso9660 defaults
挂载点,挂载 mkdir /medida/cdrom
mount -a
配置Yum源
本地yum源
yum-config-manager --add-repo=file:///meida
echo “gpgcheck=0”>>/etc/yum.repos.d/media_cdrom.repo
>EPEL 配置aliyun或sohu…
https://developer .aliyun.com/mirror/
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

  系统管理员,运维自动化

SHELL入门
一、入门基础
1.特点:简单易懂;解释性语言,不需要编译即可执行
2.命令——shell——kermel
用户——解析命令并传递给内核——执行动作
3.shell的分类
乌班图与红帽常用的shell Bourne-Again shell
查看
#cat /etc/shells
#echo $shell
#chsh -l
windows shell shift+右键 可用Linux命令
4作为程序设计语言的shell
脚本语言的总类

编译性语言
编译器——二进制
C C++
解释型语言
解释器
脚本语言
缩短传统的编写-编译-链接
5 学好shell编程基础知识
简单,易用,高效(运维)

熟练使用 vi/vim编辑器
1.vi基础命令
2.块选择
3.高级操作
熟练掌握Linux基本命令Linux基本命令
CSA阶段初级命令
熟练掌握文本三剑客 sed awk grep
熟悉常用服务器部署、优化、日志及排错
文本处理经常用日志
如何学好Shell的方法
1.掌握shell脚本基本语法
2.形成自己的脚本开发风格
3.从简单做起,简单判断,简单循环
4.多模仿,参考资料练习,多思考
5.学会分析问题,逐渐形成编程思维
6.编程变量名字要规范,采用驼峰语法表示
7.拒绝拿来主义(新手阶段)
一万小时成就九品高手

驼峰语法:第一个单词以小写字母开始,从第二个但是开始以后的每个单词的受蒂姆都采用大写字母。
匈牙利命名法: 基本原则是: 变量名=属性+类型+对象描述
此外还有下划线用法 file_name
6.shell脚本的基本元素
基本的Shell程序应该拥有以下元素
第一行的“#!/basn"
注释:说明某些代码的功能
可执行语句:实现程序的功能
#!/bash= #!bin/sh = #!/usr/bin/env bash
"date
ls
注释与风格
传统SHELL支支持单行注释,其表示方法是一个井号”#“ (注释的语言支持,比如说 不支持UTF-8)从开始到行尾都属于注释聂荣
多个井号跟一个井号一样
多行注释
:<<

7.脚本规范
(2)快速生成脚本开头的插件
(3)脚本尽量不用中文注释(乱码
(4)多使用内部命令(help查看)
(5)效率化
后者更优
cat passwd |grep root
grep root passwd

:% co $

time查看执行时间比较
(6)代码缩进(增加易读性)
(7)排错思路(看执行结果

代码与命令
条件测试的前后空格
(8)脚本以.sh 为扩展名

8.脚本执行
1)切换到shell脚本所在的目录
2)以绝对路径的方式去执行
3)直接使用bash或者sh来执行
4)当前shell执行
方法1-3开启子shell
注:、、、、
autocmd BufNewFile .py,.cc,.sh,.java exec “:call SetTitle()”
func SetTitle()
if expand("%:e") == ‘sh’
call setline(1,"#!/bin/bash")
call setline(2,
“##############################################################”)
call setline(3, “# File Name: “.expand(”%”))
call setline(4, “# Version: V1.0”) call setline(5, “# Author: kongd”)
call setline(6, “# Email: [email protected]”)
call setline(7, "# Organization: https://blog.csdn.net/yingtongqaq
")
call setline(8, “# Created Time : “.strftime(”%F %T”))
call setline(9, “# Description:”)
call setline(10,
“##############################################################”)
call setline(11, “”)
endif
endfunc

echo 显示字符串
     显示转义字符

选项——
-n 不换行输出
-e 启用反斜线转义解释
显示颜色: echo -e “\033【】”
常见的字体颜色
常见的背景颜色
字体控制选项
显示变量
echo ‘命令’
或者echo$变量名
显示命令执行结果
echo ‘命令’
或者echo $命令

修改vi配置文件 tab=四个空格

/etc/vimrc

6.6下午

shell特性回顾
bash shell
1.历史命令
2.历史命令的调用

案例:history命令显示时间日期
             变量输出要变成全局变量才能生效且在下次启动的时候
vim /etc/profile
UESR_IP=$(who -u -m | cut -d'( '-f2 |cut -d')'-f1) #取IP
export HISSTIMEFORMAT="[%F %T] [$(whoami)] [$USER_IP] "



案例:显示IP与用户 
who -u -m | awk '{print $NF}' | sed 's/【()】//g'

history 
方向键  
!数字    !7 没有空格   重复执行
!!      调用上一条命令
!字符串    从后往前搜索执行字符串命令
!$        重复上一条命令的最后一个参数

虚拟机上     ait+.   esc+.   上一条历史命令调用,从后往前,加快输入速度
             ctrl+r          从后向前搜索

3.tab键的补全命令
BASH的包 basn-completian 同时可以支持systemctl命令的补全 无二义性补全
4.命令别名
命令格式
查看命令别名的查看 alias 别名
别名的优先级比命令高,命令执行的顺序为
1.第一顺位执行用绝对路径或相对路径的命令
2.第二顺位执行别名
3.第三顺位执行Bash的内部命令
4.第四顺位执行按照$PATH混啊经变量定义的目录查找顺序找到的第一个命令。 为了让这个别名永久生效,就把别名写入环境变量配置文件
“~/.bashrc”

alias rm=‘rm -i’
1) /usr/bin/rm filename
2)rm filename

开发脚本时:复制文件,不知道目的目录是否有,不论是否有都覆盖
  解决方法1.使用命令的绝对路径
   /usr/bin/cp 	source dest/
  解决方法2.使用转义字符
  \cp source dest/ 
bash常用快捷键

ctrl的快捷键 
 ctrl+a  把光标移动到命令行开头
 ctrl+e  把光标移动到命令行行尾
 ctrl+c  强制终止当前命令
 ctrl+l  清屏 =clear

5.重定向 :
输入重定向;输出重定向
1)<< 用法
快速生成文件 EOF-- end of file
# cat > user.lst << EOF
> tom
> bob
> john
> EOF

>

6.类 型 符 号 作用
标准输出重定向 命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的
文件或设备当中。
命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的
文件或设备当中。
标准错误输出重定向 错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的
文件或设备当中。
错误命令 2>>文 件
以追加的方式,把命令的错误输出输出到指定的
文件或设备当中。
正确输出和错误输出
同时保存
命令 > 文件
2>&1
以覆盖的方式,把正确输出和错误输出都保存到
同一个文件当中。
命令 >> 文件
2>&1
以追加的方式,把正确输出和错误输出都保存到
同一个文件当中。
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到
同一个文件当中。
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到
同一个文件当中。
命令>>文件 1
2>>文件 2
把正确的输出追加到文件 1 中,把错误的输出追
加到文件 2 中
7.命令执行顺序
如果用户hadoop不存在则创建。
分析:
如何判断用户?id 用户名

		id username &> /dev/null
		
	解决:
		方法1:id hadoop &> /dev/null || useradd hadoop
		方法2:! id hadoop &> /dev/null && useradd hadoop
		
	当挂载点/media/cdrom不存在时创建。
		如何判断:[ ! -d /media/cdrom ]

8.管道

把前面的输入到后面的

####9.通配符
? 匹配一个任意字符
* 匹配0个或任意多个任意字符,也就是可以匹配任何内容
[] 匹配中括号中任意一个字符
[-] 匹配中括号中任意一个字符,-代表一个范围
[^] 逻辑非,取反

花括号 生成序列
echo {1…9} 连续
echo {1,3,5}不连续

创建目录: mkdir -p /data/web{1..3}/logs

使用{}备份
cp /etc/httpd/httpd-config{,.bak}
ls /etc/[an]*
ls /bin/[ck]*
####为什么history 命令查看的历史命令和~/.bash_history 文件中保存的历史命令是不同?
因为当前登录操作的命令并没有直接写入~/.bash_history 文件,而是保存在缓存当中的。需要等当
前用户注销之后,缓存中的命令才会写入~/.bash_history 文件。如果我们需要把内存中的命令直接写
入~/.bash_history 文件,而不等用户注销时再写入,就需要使用“-w”选项了。

你可能感兴趣的:(shell脚本学习)