shell腳本編程之函數、case語句

一、函數

調用函數前必須先定義,調用時僅使用函數名即可。

語法:
function  函數名 {
     函數體
}
也可表示為:
函數名 () {
函數體
}

示例:寫一個腳本,判定網絡內有哪些主機在線,在線的用綠色顯示,不在線的用紅示表示:

c_net () {
for i in {1..254}; do
    ping -c1 -W1 ${1}.${i} &> /dev/null
    if [ $? -eq 0 ]; then
          echo -e "\e[0;32;1m${1}.${i}\e[0m is up"
    else
          echo -e "\e[0;31;1m${1}.${i}\e[0m is down"
    fi  
done
}

b_net () {
for j in {0..255}; do
    c_net $1.$j
done
}

a_net () {
for k in {0..255}; do  
    b_net $1.$k
done
}

trap 'echo quit; exit 1' SIGINT
read -p "PLS enter a network segment: " network_seg
net_type=$(echo ${network_seg} | awk -F . '{print $1}')

if [ ${net_type} -gt 0 -a ${net_type} -lt 127 ]; then
    a_net $(echo ${network_seg} | cut -d. -f1)
elif [ ${net_type} -gt 127 -a ${net_type} -lt 192 ]; then
    b_net $(echo ${network_seg} | cut -d. -f1-2)
elif [ ${net_type} -ge 192 -a ${net_type} -le 223 ]; then
    c_net $(echo ${network_seg} | cut -d. -f1-3)
else
    echo " usag: 0.0.0.0-223.0.0.0 "
fi

二、case選擇語句

case 變量引用 in
pattern1)
     分支1
     ;;
pattern2)
     分支2
     ;;
...
*)
      分支n
      ;;
esac

說明:

case行尾必須是單詞”in“,每一個模式以右括號”)“結束 ,分支為所需執行的命令操作,每一個分支以雙分號”;;“結束。模式匹配中可以使用中括號“[ ]”表示 一個連續的范圍,如[a-z]、[0-9]等;也可使用豎杠“|”表示“或”。

示例:執行腳本,循環提示輸入字符,并判斷大小寫、數字、特殊字符,輸入exit則退出循環。

1.png

原創文章,作者:老鼠上了貓,如若轉載,請注明出處:http://www.www58058.com/7280

(0)
老鼠上了貓老鼠上了貓
上一篇 2015-08-24 21:46
下一篇 2015-08-24 21:49

相關推薦

  • linux下手工創建新用戶

    當我們要創建一個用戶時,通常使用useradd命令就可以自動創建了一個用戶;實際上,在linux下,一切皆文件,設置好幾個文件,也是可以創建出一個用戶: 文件如下: /etc/passwd  :用戶 /etc/shadow  :密碼 /home/username:用戶家目錄 /etc/group:用戶組 /etc/skel/*: &nbs…

    Linux干貨 2015-03-30
  • linux網絡管理 一

    什么是網絡?         是指將具有獨立功能的計算機和周邊設備,通過通信線路連接起來,在網絡軟件的支持下,實現資源的共享和數據的整個系統。 網絡的特征:         速度      …

    2017-03-16
  • 加密解密基礎、PKI以及自建私有CA

    加密解密基礎、PKI以及自建私有CA 加密是以某種特殊的算法改變原有的信息數據,使得未授權的用戶即使獲得了已加密的信息,但因不知解密的方法,仍然無法了解信息的內容。 解密就是加密的逆向操作,將加密過的不可讀的數據經過處理,能夠是之前不可讀的信息還原成可讀信息。 PKI是Public Key Infrastructure的首字母縮寫,翻譯過來就是公鑰基礎設施;…

    Linux干貨 2016-12-07
  • 馬哥教育網絡班22期第三周課程練習1

    1、who | awk {'print $1'} | sort | uniq  2、last | head -n1 3、awk -F":" {'print $7'} /etc/passwd |  awk '{for(i=1;i<=NF;i++)a[$i]++}EN…

    Linux干貨 2016-08-29
  • 22期第九周課堂作業

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash declare -i a=0 declare -i b=0 n=`cat /etc/passwd |cu…

    Linux干貨 2016-10-17
  • 網絡組(Network Teaming)

    網絡組(Network Teaming) 網絡組:是將多個網卡聚合在一起的方法,從而實現容錯和提高吞吐量 網絡組不同于舊版中bonding技術,提供更好的性能和擴展性 網絡組由內核驅動和teamd守護進程實現. 多種方式runner     broadcast     roundrobin     …

    Linux干貨 2017-03-26
欧美性久久久久