bash脚本编程之二 条件判断

练习:写一个脚本,完成以下任务

1、添加5个用户,user1.....user5

2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息

3、每个用户添加完成后,都要显示用户某某已经成功添加。



条件判断:

   如果用户不存在

       添加用户,给密码并显示添加成功;

   否则

       显示用户已存在,没有添加。


bash中如何实现条件判断?

条件测试类型:

整数测试

字符测试

文件测试


条件测试的表达式:(主要用于if语句用)

[ expression ]

[[ expression ]]

test expression


整数比较:


   -eq  测试两个整数是否相等:相等为真,不等为假,比如$A -eq $B

   -en:测试两个整数是否不等:不等为真,相等为假

   -gt:测试一个数是否大于另一个数:大于为真,否则为假

   -lt:测试一个数是否大于另一个数:小于为真,否则为假

   -ge:大于或等于

   -le :小于或等于


wKioL1Uy4EvwkdEbAABd5oC-h3I958.jpg


命令间逻辑关系:

逻辑与:&&

     第一个条件为假时,第二个条件不再判断,最终结果已经有。

 

逻辑或:||

     第一个条件为假时,第二条件必须得判断;第一个条件为真时,第二条件没必要判断。


wKiom1Uy39LTUbuKAAAuYQyr8ts723.jpg


如果用户user6不存在,就添加用户user6

# ! id user6 && useradd user6 

# id user6 || useradd user6


统计一个文件的行数:

wKioL1Uy4_viSYaTAABHe3Tir74653.jpg


如果/etc/inittab 文件的行数大于100,就显示好大的文件

wKiom1Uy4ybx6KNfAAArOYexr7o372.jpg


wKioL1Uy5Umyel_gAABv0bUIis8951.jpg


如果用户存在,就显示用户已存在,否则,就添加次用户:

# id user1 && echo user1 exists. || useradd user1


如果用户不存在,就添加,否则,显示其已经存在:

# !id user1 && useradd user1 || echo user1 exists.


如果用户不存在,添加并且给密码,否则,显示其已经存在:

# !id user1 && useradd user1 && echo user1 | passwd --stdin user1 || echo user1 exists.



练习:写一个脚本完成以下要求:

1、添加3个用户user1、user2、user3,但要求先判断用户是否存在,不存在则添加;

2、最后显示当前系统上共有几个用户

wKiom1Uy5peQB_q1AADcCmFFMQ8354.jpg



练习:写一个脚本完成以下要求:

给定一个用户:

1、如果UID为0,则显示此为管理员;

2、否则,就显示其为普通用户。


wKioL1Uy6Lig_O58AAA18dnN9mE851.jpg


wKiom1Uy6ZahlH-vAAB8F8LgTfg122.jpg

wKioL1Uy6x6jDgZyAABs9tBbq54397.jpg


判断一个文件是否存在,如果存在,显示OK,否则显示NO such file。


wKiom1Uy6lOw-SltAAA48vqugQc211.jpg


测试脚本是否有语法错误:

bash -n 脚本

bash -x 脚本   :单步执行


wKiom1Uy6qvCuxmwAABrQ3ZC_Ys697.jpg


判断一个用户是否存在,如果存在显示该用户已存在,如果不存在则添加该用户并添加用户密码为用户名,且提示添加用户。


wKiom1Uy67_APwH1AABgyB7oD8A723.jpg


如果用户的UID为0,那么显示为管理员,否则,显示为普通用户。

wKiom1Uy7GiDtLwaAAB-5YV93Gg178.jpg


练习:

判断当前系统上是否有用户的默认shell为bash;如果有,就显示有多少个这类用户。否则就显示没有这类用户。


wKiom1Uy7PDj6jj_AAB0Jg9zZ7I730.jpg


提示:

应用一个命令的执行结果,要使用命令引用,如:RESAULTS=`wc -l /etc/passwd | cut -d: -f1`;

使用一个命令的执行状态结果,要直接执行命令,一定不能引用,如:if id user1 一句中的id 命令就一定不能加引号;

如果想把一个命令的执行结果赋值给某变量,要使用命令引用,比如:USERID=`id -u user1`

如果想把一个命令的执行状态结果保存下来,并作为命令后自行成功与否的判断条件,则需要先执行此命令,而后引用其状态结果,如:

     id -u user1

     RETVAL=$?

     此句结对不可以写为RETVAL=`id -u user1`



练习:

判断当前系统上是否与用户的默认shel为bash,

如果有,就系那是其中一个的用户名,否则,就显示没有这类用户。


wKioL1Uy8KySx8Y3AABzhc45EaQ751.jpg


exit:退出脚本

exit # :#代表退出状态码。

如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码。


练习:

给定一个文件,如:/etc/inittab

判断这个文件中是否有空白行

如果有,则显示其空白行行数,否则,显示没有空白行。


wKioL1Uy8lChwHk2AAChSYByexs485.jpg


练习:

给定一个用户,判断其UID与GID是否一样

如果一样,就显示此用户为“good guy”,否则,就显示此用户为“bad guy”。


wKiom1Uy-yKA9c8xAABuJsfwsdw884.jpg


进一步要求:不使用id命令获得其id号。


wKioL1Uy_NLgEwvZAADdocmV4aI602.jpg


练习:

判定命令历史中历史命令的总条目是否大于1000,如果大于,则显示“some command will gone.”,否则显示“OK”。

相关知识:

wKiom1Uy_IuBnmZpAABU8szTxGk651.jpg


shell中算术运算:


 A=3 

 B=6 

1、let 算术运算表达式

   let C=$A+$B 

2、$[算术运算表达式]

   C=$[$A+$B]

3、$((算术运算表达式))

   C=$(($A+$B))

4、expr 算术运算表达式,表达式中各操作数及运算符之间必须有空格,而且要使用命令引用

   C=`expr $A + $B`

  wKioL1UzAsqTo2mNAAC5s0Axlas375.jpg


  练习:

 给定一个用户,获取其密码警告期限;而后判断用户密码使用期限是否已经小于警告期限;如果小于,则显示“Warning”;否则,就显示“OK”。


提示:计算方法:最长使用期限减去已经使用的天数即为剩余使用期限

wKiom1UzAyeQFFpoAABC7a_Dc40665.jpg

15768:修改密码时间

99999:有效期时间

7:报警时间


wKioL1UzBJnz2sQQAACshz7M7w8437.jpg


wKiom1UzBc3RT4o3AACNIBeQH0Q193.jpg

wKiom1UzBeywXyd8AACUl505LII003.jpg


练习:

给定一个文件;

如果是一个普通文件,就提示为普通文件;

如果是一个目录,就提示为目录;

否则,此为无法识别的文件。


wKioL1UzB96BSPjiAABqHU664OA423.jpg



wKiom1UzBvLAVMtEAACY2sSf1m8280.jpg


练习:

写一个脚本,能接受一个参数(文件路径)

判定:此参数如果是一个存在的文件,就显示“OK”;否则显示“NO such file.”。


wKioL1UzCS3SrOCBAAArDsOgZ5c314.jpg(不给文件路径也默认存在)


wKioL1UzCXmRgClxAAA3Y1XkOb8547.jpg      

wKiom1UzCJDwYbHvAABU3jrIe1E053.jpg


必须输入参数,否则不再运行下面的脚本:

wKioL1UzCh7x3bhaAABePhozLMY932.jpg


给输入的参数定位:shift

wKioL1UzCu6B6V1GAABP67JJaPM091.jpg


wKiom1UzCfKzs1N1AABEcfJE86I895.jpg


练习:写一个脚本

给脚本传递两参数(整数);

显示此两者之和,之乘积。


wKioL1UzC5HwSBpyAABoYgoX5J8285.jpg






你可能感兴趣的:(编程,脚本,bash)