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

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

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

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

条件判断:

   如果用户不存在

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

   否则

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

bash中如何实现条件判断?

条件测试类型:

整数测试

字符测试

文件测试

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

[ expression ]

[[ expression ]]

test expression

整数比较:

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

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

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

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

   -ge:大于或等于

   -le :小于或等于

命令间逻辑关系:

逻辑与:&&

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

 

逻辑或:||

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

wKiom1Uy39LTUbuKAAAuYQyr8ts723.jpg

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

# ! id user6 && useradd user6 

# id user6 || useradd user6

统计一个文件的行数:

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

wKiom1Uy4ybx6KNfAAArOYexr7o372.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、最后显示当前系统上共有几个用户

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

给定一个用户:

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

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

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

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

bash -n 脚本

bash -x 脚本   :单步执行

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

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

练习:

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

提示:

应用一个命令的执行结果,要使用命令引用,如: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,

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

exit:退出脚本

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

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

练习:

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

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

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

练习:

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

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

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

练习:

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

相关知识:

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`

 

  练习:

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

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

15768:修改密码时间

99999:有效期时间

7:报警时间

练习:

给定一个文件;

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

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

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

练习:

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

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

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

      

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

给输入的参数定位:shift

练习:写一个脚本

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

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