1. 程式人生 > 其它 >shell指令碼例題—if、case

shell指令碼例題—if、case

目錄

一、例題1

1.1 需求

檢查使用者家目錄中的 test.sh 檔案是否存在,並且檢查是否有執行許可權

1.2 指令碼命令

if [ -e ~/test.sh ];then
  echo "test.sh存在"
  if [ -x ~/test.sh ];then
    echo "test.sh有執行許可權"
  else
    echo "無執行許可權"
  fi
else
  echo "test.sh不存在"
fi

1.3 操作驗證



二、例題2

2.1 需求

提示使用者輸入100米賽跑的秒數,要求判斷秒數大於0且小於等於10秒的進入選拔賽,大於10秒的都淘汰,如果輸入其它字元則提示重新輸入;進入選拔賽的成員再進一步判斷男女性別,男生進男生組,女生進女生組,如果輸入錯誤請提示錯誤

2.2 指令碼命令

read -p "輸入100米賽跑的秒數:" num
if [ $num -ge 0 -a $num -le 10 ];then
  echo "進入決賽啦"
   read -p "請輸入性別:" sex
   case $sex in
   男)
     echo   "進男生組"
   ;;
   女)
     echo “進女生組”
   ;;
   *)
     echo “提示錯誤,請重新輸入正確性別”
   esac
elif [ $num -gt 10 ];then
  echo "被淘汰咯"
else
  echo "重新輸入"
fi

2.3 操作驗證

三、例題3

3.1 需求

用case語句解壓根據字尾名為 .tar.gz 或 .tar.bz2 的壓縮包到 /opt 目錄

3.2 指令碼命令

case $1 in
*.tar.gz)
  if [ -e $1 ];then
    tar zxvf $1 -C /opt &> /dev/null
  else
    echo "$1不存在"
  fi
;;
*.tar.bz2)
  if [ -e $1 ];then
    tar jxvf $1 -C /opt &> /dev/null
  else
    echo "$1不存在"
  fi
;;
*)
  echo "檔案格式不對"
esac

3.3 操作驗證

四、例題4

4.1 需求

提示使用者輸入內容,使用if 語句判斷輸入的內容是否為整數

4.2 指令碼命令

read -p "請輸入數字:" num
if [ $num = $(awk "BEGIN {print $num}" | awk -F '.' '{print $1}') ];then
 echo "整數"
else
 echo "小數" 
fi

4.3 操作驗證

五、例題5

5.1 需求

根據上一題再判斷輸入的內容是奇數還是偶數

5.2 指令碼命令

read -p "請輸入數字:" num
if [ $num = $(awk "BEGIN {print $num}" | awk -F '.' '{print $1}') ];then
 if [ $(expr $num % 2) = 0 ];then
   echo "偶數"
 else
   echo "奇數"
 fi
else
 echo "小數"
fi

5.3 操作驗證

六、例題6

6.1 需求

用if 語句判斷主機是否存活

6.2 指令碼命令

ping -c 3 -i 0.5 -w 2 $1 &> /dev/null
if [ $? -eq 0 ];then
 echo "$1 is online"
else
 echo "$1 is offline"
fi

6.3 操作驗證

七、例題7

7.1 需求

用case語句在/etc/init.d/目錄中寫一個firewalld指令碼,並加入到系統服務管理中
使能夠使用 service firewalld start|stop|restart|status 來管理firewalld服務,
要求如果命令選項不對,則提示 “用法: $0 {start|stop|status|restart}”

7.2 指令碼命令

read -p "輸入start|stop|status|restart:來管理防火牆:" fire
case $fire in
start)
 systemctl start firewalld
 echo "防火牆開啟"
;;
stop)
 systemctl stop firewalld
 echo "防火牆關閉"
;;
restart)
 systemctl restart firewalld
 echo "防火牆重啟"
;;
status)
 systemctl status firewalld
 echo "防火牆狀態查詢"
;;
*)
 echo "用法:$0{start|stop|status|restart}"
esac

7.3 操作驗證