sh1.shell脚本练习
练习:
1.写一个脚本
判断当前系统上是否有用户的默认shell为bash
如果有,就显示其中一个的用户名;否则,就显示没有这类用户。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 grep "bash$" /etc/passwd &> /dev/null 3 NAME=$? 4 if [ $NAME -eq 0 ];then 5 AUSER=`grep "bash$" /etc/passwd | cut -d: -f1 | head -1` 6 echo "$AUSER is one of such user!" 7 else 8 echo "no such user~~!!!" 9 fi 10 11 # grep "bash$” 必须锚定,否则取不到返回值, 12 #grep "\<bash$" ,锚定行尾,词首
2.写一个脚本
给定一个文件,比如/etc/inittab
判断这个文件中是否有空白行;如果,有则显示其空白行数;否则,显示没有空白行。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 # 3 FNAME=/etc/inittab 4 if [ ! -e $FNAME ];then ## -e 判断文件是否存在 5 echo "NO such file!~" 6 exit 1 7 fi 8 9 #grep "^$" $FNAME &> /dev/null 10 #AB=$? 11 12 if grep "^$" $FNAME &> /dev/null;then ##直接调用结果判断 13 TT=`grep "^$" $FNAME | wc -l` 14 echo " $TT white line " 15 else 16 echo "NO white line" 17 fi 18 19 20 常用的条件测试有三种: 21 整数测试: -gt ,le ,ne, eq,ge,lt 22 23 文件测试:-e file: 测试文件是否存在 24 -f file: 测试文件是否为普通为文件 25 -d file:测试指定路径是否为目录 26 -r , -w , -x 是否有读写执行权限 27 28 例: [ -e /etc/inittab ] 29 [ -x /etc/rc.d/rc.sysinit ]
3.写一个脚本
给定一个用户,判断其UID与GID是否一样
如果一样,就显示此用户为“good guy" ;否则,就显示此用户为”bad guy".
注:不使用id命令获得其id号。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #!/bin/bash 2 # 3 NAME=abcd 4 if ! grep "^$NAME\>" /etc/passwd &> /dev/null;then #判断用户是否存在 5 echo "NO $NAME user!" 6 exit 8 7 fi 8 9 USID=`grep "^$NAME\>" /etc/passwd | cut -d: -f3` 10 GRID=`grep "^$NAME\>" /etc/passwd | cut -d: -f4` 11 if [ $USID -eq $GRID ];then 12 echo "good guy" 13 else 14 echo "bad guy" 15 fi
4.写一个脚本
给定一个用户,获取其密码警告期限;
而后判断用户最近一次修改密码时间距其最长使用期限是否已经小于警告期限;
如果小于,则显示“Warning”,否则,就显示“OK” 。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #/bin/bash 2 # 3 NAME=user1 4 DA=`date +%s` 5 YD=`grep "^$NAME" /etc/shadow | cut -d: -f3` 6 GD=`grep "^$NAME" /etc/shadow | cut -d: -f5` 7 JD=`grep "^$NAME" /etc/shadow | cut -d: -f6` 8 TD=`expr $DA/86400` 9 YYD=$[$GD-$[$TD-$YD]] 10 11 if [ $YYD -lt $JD ];then 12 echo "Warning!!" 13 else 14 echo "OK!~" 15 fi 16 17 如果查看/etc/shadow文件存放的特殊帐号信息如下: 18 name:!!:13675:0:99999:7::: 19 每一行给一个特殊帐户定义密码信息,每个字段用 : 隔开。 20 字段 1 定义与这个 shadow 条目相关联的特殊用户帐户。 21 字段 2 包含一个加密的密码。 22 字段 3 自 1/1/1970 起,密码被修改的天数 23 字段 4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”) 24 字段 5 系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”) 25 字段 6 密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”) 26 字段 7 密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”) 27 字段 8 该帐户被禁用的天数(-1 表示“该帐户被启用”) 28 字段 9 保留供将来使用 29 30 整数比较: 31 -eq : 测试两个整数是否相等;比如 [ $A -ep $B ] 32 -ne : 测试两个整数是否不等,不等为真,相等为假 33 -gt : > 34 -lt : < 35 -ge: >= 36 -le : <= 37 38 shell 中如何做算术运算: 39 1.let 算术运算表达式 let c=$A+$B 40 2. $[ 算术运算表达式 ] 41 3. $((算术运算表达式)) 42 4. expr 算术运算表达式,表达式中各运算符之间要有空格,反号 43 c=`expr $A + $B`
5.写一个脚本
判定命令历史中历史命令的总条目是否大于1000,
如果大于,则显示“Some command" ,否则显示”OK“
1 #/bin/bash 2 # 3 NOBM=`history | tail -1 | cut -d' ' -f2` 4 if [ $NOBM -gt 1000 ];then 5 echo "Some command!" 6 else 7 echo "OK!!" 8 fi