脚本01.sh:
1、设定变量FILE的值为/etc/passwd
2、依次向/etc/passwd中的每个用户问好,并显示对方的shell,形如:
Hello, root, your shell: /bin/bash
3、统计一共有多少个用户
#!/bin/bash # FILE=/etc/passwd UNAMES=`cut -d ":" -f 1 /etc/passwd` SHELLS=`cut -d ":" -f 7 /etc/passwd` NUM="echo $UNAMES | wc -w" #echo $UNAMES #echo $SHELLS #echo $NUM for I in `seq 1 $NUM`;do UNAME=`echo $UNAMES | cut -d " " -f $I` SHELL=`echo $SHELLS | cut -d " " -f $I` echo "Hello $UNAME,your shell is $SHELL" done echo "total $NUM users."
脚本02.sh:
添加10个用户user1到user10,密码同用户名;但要求只有用户不存在的情况下才能添加;
扩展:
接受一个参数:
add: 添加用户user1..user10
del: 删除用户user1..user10
#!/bin/bash # case $1 in --add|-a) for I in `seq 1 10`;do if ! id user$I &> /dev/null;then useradd user$I &> /dev/null echo "user$I" | passwd --stdin user$I &> /dev/null echo "user$I creat successful." else echo "user$I exist." fi done ;; --del|-d) for I in `seq 1 10`;do if id user$I &> /dev/null;then userdel -r user$I &>/dev/null echo "user$I delete successful." else echo "user$I exist." fi done ;; *) echo "Unknow commend,-a for add ,-d for delete." esac
脚本03.sh:
计算100以内所有能被3整除的正整数的和;
#!/bin/bash # SUM=0 for I in `seq 0 3 100`;don SUM=$[$SUM+$I] done echo "$SUM"
脚本04.sh:
计算100以内所有奇数的和以及所有偶数的和;分别显示之;
#!/bin/bash # I=0 SUM1=0 SUM2=0 for I in `seq 0 2 100`;do SUM1=$[$SUM1+$I] done for I in `seq 1 2 100`;do SUM2=$[$SUM2+$I] done echo "ou SUM1=$SUM1" echo "ji SUM2=$SUM2"
脚本05.sh:
写一个脚本22,分别显示当前系统上所有默认shell为bash的用户和默认shell为/sbin/nologin的用户,并统计各类shell下的用户总数。显示结果形如:
BASH,3users,they are:
root,redhat,gentoo
NOLOGIN, 2users, they are:
bin,ftp
#!/bin/bash # echo -e "BASH,`grep /bash /etc/passwd | wc -l` users,they are :\n `grep /bash /etc/passwd | cut -d ":" -f 1 | tr "\n" ","`" echo -e "NOLOGIN,`grep /sbin/nologin /etc/passwd | wc -l` users,they are : \n `grep /sbin/nologin /etc/passwd | cut -d ":" -f 1 | tr "\n" ","`"
脚本06.sh:
给定一个用户:
1、如果其UID为0,就显示此为管理员;
2、否则,就显示其为普通用户;
#!/bin/bash # read -p "Please input your user name:" NAME UID=`id -u $NAME` ([ $UID == 0 ] && echo "You are admin." || echo "You are not admin."
脚本07.sh:
判断当前系统上是否有用户的默认shell为bash;
如果有,就显示有多少个这类用户;否则,就显示没有这类用户;
#!/bin/bash # (`grep /bash /etc/passwd &> /dev/null` && echo "`grep /bash /etc/passwd | wc -l `users using BASH.") || echo "no users using BASH."
脚本08.sh:
给定一个文件,比如/etc/rc.d/rc.sysinit
判断这个文件中是否有空白行;
如果有,则显示其空白行数;否则,显示没有空白行。
#!/bin/bash # FILE=/etc/rc.d/rc.sysinit grep ^$ $FILE &> /dev/null && echo "there are `grep ^$ $FILE | wc -l` blank lines." || echo "no blank lines."
笔记:查找空白行的表示方法用“^$”,例“grep ^$ /etc/rc.d/rc.sysinit”
脚本09.sh:
给定一个用户,判断其UID与GID是否一样。
如果一样,就显示此用户为“good guy”;否则,就显示此用户为“bad guy”。
扩展:不使用id命令获得其id号;
#!/bin/bash # read -p "Please input your username:" NAME grep ^$NAME /etc/passwd &> /dev/null if [ $? != 0 ];then echo "no such user" else UNAME=`grep ^$NAME /etc/passwd &> /dev/null | cut -d ":" -f 3` GNAME=`grep ^$NAME /etc/passwd &> /dev/null | cut -d ":" -f 4` if [ $UNAME == $GNAME ] ; then echo "GOOD BOY!" else echo "BAD BOY!" fi fi
笔记:$0:脚本本身。$1:第一个参数。$2:第二个参数。。。。$#:传递到脚本的参数个数。$?:命令执行状态返回值,0表示成功,其他表示失败; 如果变量赋值为一些命令的执行结果,则命令用反引号引起来。
脚本10.sh:
给定一个用户,获取其密码警告期限;
而后判断用户密码使用期限是否已经小于警告期限;
提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限;
如果小于,则显示“Warning”;否则,就显示“OK”。
#!/bin/bash # read -p "Please input your username: " NAME grep ^$NAME /etc/passwd &> /dev/null if [ $? != 0 ];then echo "no such user" else WARN_TIME=`grep ^NAME /etc/shadow | cut -d ":" -f 6` MAX_TIME=`grep ^NAME /etc/shadow | cut -d ":" -f 5` CHANG_TIME=`grep ^NAME /etc/shadow | cut -d ":" -f 3` TONEW_TIME_S=`date +%s` TONEW_TIME_D=$[$TONEW_TIME_S/86400] TIME=$[$MAX_TIME-($TONEW_TIME_D-$CHANG_TIME)] if [ $TIME -lt $WARN_TIME ];then echo "Warning" else echo "OK" fi fi
脚本11.sh:
判定命令历史中历史命令的总条目是否大于1000;
如果大于,则显示“Some command will gone.”;否则显示“OK”。
#!/bin/bash # I=`history | wc -l` if [ $I -gt 1000 ];then echo "Some command will gone" else echo "OK" fi