练习 1: 写一个脚本程序, 完成以下任务
1, 添加五个用户, user1,user2,user3,user4,user5;
2, 添加之前先判断是否存在该用户, 如果存在则显示 "某某用户已存在";
3, 每个用户的密码都为 RedHat, 而且要求添加密码完成后不显示命令的执行结果;
4, 每个用户添加完成以后, 都需要显示 "某某用户已经添加成功";
首先要判断用户是否存在, 我们通过 id 命令来判断;
- id user1 #判断 user1 是否存在
- echo "user1 exists." #如果用户存在就输出 user1 exists.
- useradd user1 #如果不存在就添加 user1
- echo "redhat" | passwd --stdin user1 #添加用户后输入密码即可
- #!/bin/bash
- #
- #if 语句在判断的时候如果使用了 "-eq -nq -lt -gt" 这样的条件判断语句, 才会使用 "[]";
- if id $1 &> /dev/null; then
- echo "$1 exists."
- else
- useradd $1
- echo $1 | passwd --stdin $1 &> /dev/null
- echo "Add $1 sccessful."
- fi
练习 2: 写一个脚本程序完成一下任务
判断 / etc/inittab 文件是否大于 100 行, 如果大于, 则显示 "/etc/inittab is a big file." 否则则显示 "/etc/inittab is a small file.";
- #!/bin/bash
- #
- LINES=`wc -l /etc/inittab`
- echo LINES
- FINLINES=`echo $LINES | cut -d' ' -f1`
- echo $FINLINES
- [ $FINLINES -gt 100 ] && echo "/etc/inittab is a big file." || echo "/etc/inittab is a small file."
练习 3: 写一个脚本, 完成一下任务
给定一个用户, 来判断这个用户是什么用户, 如果是管理员用户, 则下那是 "该用户为管理员", 否则则显示其为普通用户;
不通过 if 语句:
- #!/bin/bash
- #
- NAME=USER1
- USERID=`id -u $NAME`
- [ USERID -eq 0 ] && echo "Admin" || echo "Common user."
通过 if 语句:
- #!/bin/bash
- #
- USERID=`id -u $1`
- if [ $USERID -eq 0 ]; then
- echo "Admin"
- else
- echo "Common user."
- fi
练习 4: 判断文件是否存在
- #!/bin/bash
- #if [ -e $1 ]; then
- echo "File exists."
- else
- echo "File does not exists."
- fi
练习 5: 判断当前系统上是否有用户的默认 shell 程序是否为 bash 程序, 如果有, 就显示有多个这类用户, 否则就显示没有这类用户;[并且显示出那些用户是 bash]
- #!/bin/bash
- #
- BASHLINE=`grep "bash$" /etc/passwd | wc -l`
- #BASHLINE 的变量也可以换一种方式来定义
- #grep "\<bash$" /etc/passwd &> /dev/null #\<bash$ : 通过正则表达式指定单词 - bash
- if [ $BASHLINE -eq 0 ]; then
- echo "We don't have /bin/bash user."
- else
- echo "We have $BASHLINE user,This number is $BASHLINE."
- echo "grep bash$ /etc/passwd | cut -d':'-f1"
- fi
练习 6: 写一个脚本程序, 给定一个文件, 比如 / etc/inittab
1, 判断这个文件中是否有空白行;
2, 如果有, 则显示其空白行的行号, 否则显示没有空白行;
- #!/bin/bash
- #
- SPACELINE=`grep "^$" $1 | wc -l`
- if [ $SPACELINE -eq 0 ]; then
- echo "This file not have space line."
- else
- echo "This file have $SPACELINE space line.This number is $SPACELINE."
- fi
[为了完善脚本程序, 我们还需要对 $1 的传参做一个测试, 看这个参数是否存在]
- if [ ! -e $1 ]; then
- echo "No $1."
- exit 8
- fi
练习 7: 写一个脚本程序, 给定一个用户, 判断其 UID 与 GID 是否一样, 如果是一样的, 就显示次用户为 "good guy", 否则就显示用户为 "bad guy";
- #!/bin/bash
- #
- USERID=`id -u $1`
- GRPID=`id -g $1`
- if [ $USERID -eq $GRPID ]; then
- echo "good guy."
- else
- echo "bad guy."
- fi
[使用 id 命令来获取 UID 和 GID]
cut -d':' -f3,4 /etc/passwd #同样可以获取 ID 号
练习 8: 写一个脚本程序, 给定一个用户, 获取其密码警告期限;
然后判断用户最近一次修改密码时间距离今天是否已经小于警告期限;
提示: 使用算数运算的方式 $[$A-$B], 表示变量 A 的值减去变量 B 的值的结果; 如果小于, 则显示 "Warning", 否则, 就显示 "OK";
- #!/bin/bash
- #
- W=`grep "abc" /etc/shadow | cut -d: -f6` #取出密码过期的警告时间
- S=`date +%s` #指定系统元年到现在经过的时间 (秒)
- T=`expr $S/86400` #指定系统元年到现在经过的天数 (天)
- L=`grep "^abc" /etc/shadow | cut -d: -f5` #取出密码使用的过期时间
- N=`grep "^abc" /etc/shadow | cut -d: -f3` #取出密码最近一次修改的时间
- SY=$[$L-$[$T-$N]] #算出还剩下的多少天过期 (SY)
- if [ $SY -lt -$W ]; then
- echo "Worning"
- else
- echo "OK"
- fi
练习 9: 判断命令历史中历史命令的总条目是否大于 1000, 如果大于, 则显示 "some command will gone", 否则显示 ok;
- #!/bin/bash
- #
- HISTLINE=`history | wc -l`
- if [ $HISTLINE -ge 1000 ]; then
- echo "Some command will gone."
- else
- echo "ok"
- fi
也可以通过查看 history 的命令编号来比较:
history | tail -1 | cut -d' ' -f3
练习 10: 写一个脚本程序;
给定一个文件: 如果是一个普通文件, 就显示出来, 如果是一个目录, 也显示出来, 否则, 就显示 "无法识别该文件".
- #!/bin/bash
- #
- if [ ! -e $1 ]; then
- echo "No such file."
- exit 6
- fi
- if [ -f $1 ]; then
- echo "Common file."
- elif [ -d $1 ]; then
- echo "Directory."
- else
- echo "Unknown."
- fi
练习 11: 写一个脚本, 能接受一个参数 (文件路劲), 判定: 这个参数如果是一个存在的文件就显示 "OK", 否则显示 "No such file"
- #!/bin/bash
- #
- if [ $# -lt 1 ]; then # $# 这个参数表示 统计输入参数的个数;
- echo "Usage: ./JudgeFile2.sh AG1 [AG2 ...]"
- exit 7
- fi
- if [ -e $1 ]; then
- echo "OK."
- else
- echo "No such file."
- fi
练习 12: 写一个脚本, 给脚本传递两个参数, 显示两者之和和两者之积;
- #!/bin/bash
- #
- if [ $# -lt 2 ]; then
- echo "Usage: cacl.sh ARG1 ARG2"
- exit 8
- fi
- echo "The sum is:$[$1+$2]"
- echo "The prod is:$[$1*$2]"
来源: http://www.bubuko.com/infodetail-2946422.html