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代表非空里面有东西,其他代表空