閒來無事,想練習下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