闲来无事,想练习下shell脚本,因而网上找题目,找到如下这么一条题shell
要求:bash
用户输入A;B;C;D;E;F;Gide
输入A的话就查看/etc/passwd最后5个系统用户,只要显示用户名和UID就好了,其余不要函数
输入B的话就显示系统开机时间多久了spa
输入C的话就判断当前磁盘根目录使用状况是否超过50%,若是超过50%就显示“disk space is used over 50%”;若是没超过50%就显示“disk space is user below 50%”进程
输入D的话就显示出系统当前处于LISTEN状态的PID进程程序名称,以“program-name(pid)”这种形式显示。ip
输入E的话获取系统的IP和掩码,以"IP/NETMASK"形式显示input
输入F的话添加系统用户,完了后添加该用户密码(记得给以提示操做)it
输入G的话显示系统使用率最多的10条命令,还有使用的次数class
还有一点,执行脚本的时候要说清楚下ABCDEFG各个选项的做用!
若是输入其余非ABCDEFG选项的错误选项,就显示“your input is wrong”消息
脚本:
这里每一个选项都用了函数来表示
#!/bin/bash
#author dennis.xie
#!/bin/bash
#菜单
cat <<EOF
(A)输入A查看/etc/password最后5个用户。
(B)输入B的话就显示系统开机时间多久了
(C)输入C的话就判断当前磁盘根目录使用状况是否超过50%,若是超过50%就显示“disk space is used over 50%”;若是没超过50%就显示“disk space is user below 50%”
(D)输入D的话就显示出系统当前处于LISTEN状态的PID进程程序名称,以“program-name(pid)”这种形式显示。
(E)输入E的话获取系统的IP和掩码,以"IP/NETMASK"形式显示
(F)输入F的话添加系统用户,完了后添加该用户密码(记得给以提示操做)
(G)输入G的话显示系统使用率最多的10条命令,还有使用的次数
EOF
choice(){
read -p "please input you choice (A|B|C|D|E|F|G)" _VAR
case $_VAR in
A)
A
;;
B)
B
;;
C)
C
;;
D)
D
;;
E)
E
;;
F)
F
;;
G)
G
;;
*)
echo "your input is wrong"
choice
;;
esac
}
#A选项
A(){
tail -n 5 /etc/passwd | awk -F":" '{print $1,$3}'
}
#B选项
B(){
uptime
}
#C选项
C(){
_use=$(df -h / | tail -n 1 | awk '{print +$5}' )
if [ "${_use}" -gt 50 ]
then
echo "disk space is user over 50%"
else
echo "disk space is use below 50%"
fi
}
#D选项
D()
{
lsof -i -P | awk '$NF~/LISTEN/ && NR>2{print $1"("$2")" | "sort"}' | uniq
}
#E选项
E(){
ip addr | grep eth | grep inet | awk '{ print $2}'
}
#F选项
F(){
uname(){
read -p "add user,pls input the user's name" _name
if [ -z $_name ]
then
uname
else
useradd ${_name}
upasswd(){
read -p "pls input password for user" _passwd
if [ -z $_passwd ]
then
upasswd
else
echo ${_passwd} |passwd --stdin ${_name}
fi
}
upasswd
fi
}
uname
}
#G选项
G(){
#显示系统使用率最多的10条命令,还有使用的次数,我认为是整条命令
grep -v "#" ~/.bash_history |awk '{++a[$0]}END{for(i in a)print a[i],i| "sort -k 1 -nr"}' | head
}
choice