shell就是解决我们运维工作中经常重复性的工作,我们将工作中每天要干的重复性的工作放在一个脚本中,然后运行,解决了大部分的重复性的工作,可以做更多的其它事情。
写shell的标准程序
*.sh 脚本的名字后面一般要加.sh的后缀
#!/bin/bash 你用什么是什么shell写的脚本
#Autor : xxx 你的名字
#Data:xxxx 创建脚本的时间
#Descripton:xxxx 描述这个脚本是干什么用的
运行shell脚本的方法
1.bash *.sh 用bash 执行
2.chmod +x *.sh 给shell脚本加执行权限
3.cat *.sh |bash 加管道符执行
4./data/*.sh 用绝对路径执行
5.http://ip/*.sh|bash 远程调用服务器的脚本执行
6.将脚本放到任意一个$PATH变量里面的路径下面
bash -n *.sh 检查脚本中的语法错误
bash -x *.sh 跟踪调试脚本
如果命令能识别变量就不用加$,如果不能就要加$
变量分为系统自带的只读变量和自定义的变量,系统自带的只读变量是不可更改的
自定义变量命名规则
1.不能使用系统的保留名字
2.只能使用数字,字母还有下划线,但是数字不能开头
3.设置变量的名字要见名知义
4.统一命名规则,大驼峰,就是所有的单词首字母大写
bash中的变量一般分为:局部变量 ;环境(全局)变量;本地变量;位置变量;特殊变量
局部变量:
局部变量只能对当前shell执行,不能在其它shell进程执行,不能在父进程和子进程执行
例:name=xixi 给xixi设置一个变量名字为$name
name=$USER 可以引用变量
name=hostname 可以引用命令
set :可以查看已经定义的所有变量
unset 变量 :删除变量,当我们执行完shell的时候会留下许多不用的垃圾变量,当过去很长的时间会在系统内留下许多的垃圾变量,会大量的占用系统的内存,建议用完变量以后就删除。
echo $$ 可以查看当前的进程编号
echo $PPTD 可以查看父进程的编号
pstree -p 可以查看所有进程的编号
环境(全局)变量
全局变量能传到子进程,但是不能传到父进程,在变量附加完成以后要声明这个是全局变量 export
例 :name=xixi export $name 或 export name=xixi
env可以查看变量
环境变量
环境变量是bash自己建的特殊变量,能直接调用
例:$UID $PATH $SHELL ……
只读变量和位置变量
只读变量是不能修改和删除的 readonly -p 或declare -r 查看只读变量
readonly name=xixi 声明一个只读变量 ,只读变量的生命周期一般是当前进程的结束
位置变量是让写的脚本更灵活,加不同的参数,执行不同的功能
在脚本代码中调用通过命令行传递给脚本的参数
例:$1 $2 $3 …. 分别对应的a b c ….. 它对应的可以是文件也可以对应目录
$* :所有字符的参数
$@:所有字符的参数
$#:所有参数的个数
$0 :代表脚本的名字
shift:换位符,当一个程序执行完成以后整体的参数会往左移,默认移一位,也可以更改,也就是说$1对应的a执行完成以后,会自动的往左移一位,$1对应的变成b继续执行
退出状态
echo $? 查看脚本成不成功
0代表成功,1-255代表失败
echo $? 的判断是移最后一条命令的结果为准,成功的话返回值是0,不成功返回值是1-255
返回的值也可以修改 例:exit 10 就是将他返回的值改成了10 ,以后返回的特定的值代表特定的内容
算术运算
bash中的算术运算 let
例: 赋值 a=10 b=20
let c=a+b 或 c=$[a+b] 或 c=((a+b))
可以用 echo $c 查看结果
逻辑运算
&与并且and | 或者 or
0&0 =0 假与假 是假
0&1 =0 假与真 是假
1&0 =0 真与假 是假
1&1= 1 真与真 是真
0 | 0 = 0 假或假 是假
0 | 1 = 1 假或真 是真
1 | 0 = 1 真或 假 是真
1 | 1 = 1 真或真 是真
短路与 && 短路或 | |
0&&0 =0
0&&1 =0
1&&0 =0
1&&1= 1
chdm1 && chdm2 如果命令1为假 ,命令2 不需要执行 反之命令1为真,需要执行命令2
chdm1 | | chdm2 如果命令1为真,命令2不需要执行 反之命令1为假,命令2不需要执行
条件测试
test 判断表达式是否成立
qwe=qqq
asd=www
test $qwe = $asd
echo $?
判断变量qwe和asd变量的值是否相同,相同得0,不同的1到255
或 [ $qwe = $asd ]
判断字符串的长度
[ -z $var ] 判断var的长度是不是为0,0就是没有存东西
[ -n $var ] 或 [ $var ] 判断var是不是非空,0代表非空里面有东西,其他代表空