练习:写一个脚本,完成以下任务
1、添加5个用户,user1,.....,user5
2、每个用户的密码同用户名,而且要求,添加密码完成后不显示passwd命令的执行结果信息
3、每个用户添加完成后,都要显示用户某某已经成功添加。
条件判断:
如果用户不存在
添加用户,给密码并显示添加成功;
否则
显示用户已存在,没有添加。
bash中如何实现条件判断?
条件测试类型:
整数测试
字符测试
文件测试
条件测试的表达式:(主要用于if语句用)
[ expression ]
[[ expression ]]
test expression
整数比较:
-eq 测试两个整数是否相等:相等为真,不等为假,比如$A -eq $B
-en:测试两个整数是否不等:不等为真,相等为假
-gt:测试一个数是否大于另一个数:大于为真,否则为假
-lt:测试一个数是否大于另一个数:小于为真,否则为假
-ge:大于或等于
-le :小于或等于
命令间逻辑关系:
逻辑与:&&
第一个条件为假时,第二个条件不再判断,最终结果已经有。
逻辑或:||
第一个条件为假时,第二条件必须得判断;第一个条件为真时,第二条件没必要判断。
如果用户user6不存在,就添加用户user6
# ! id user6 && useradd user6
# id user6 || useradd user6
统计一个文件的行数:
如果/etc/inittab 文件的行数大于100,就显示好大的文件
如果用户存在,就显示用户已存在,否则,就添加次用户:
# 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
练习:写一个脚本
给脚本传递两参数(整数);
显示此两者之和,之乘积。