函數:功能,function
代碼重用
函數:把其中某個特定的功能或者功能的代碼,封閉起來,給一個名字,在使用的時候直接使用名字來調用,這就是函數的功能
定義方法一:
function FUNCNAME(不能以數據開頭){
command
}
定義方法二:
FUNCNAME() {
COMMAND
}
#!/bin/bash # SHOWMENU() { cat << EOF d|D)show disk usages. m|M)show memory usages. s|S)show swap usages. q|Q)quiting. EOF } SHOWMENU read -p "Enter your choce: " CHOICE until [ $CHOICE == 'q' -o $CHOICE == 'Q' ];do case $CHOICE in d|D) df -lh;; m|M) free -m | grep "^Mem";; s|S) free -m | grep "^Swap";; *) SHOWMENU esac read -p "Enter your choce again: " CHOICE SHOWMENU done
調用函數的執行結果:
#!/bin/bash # TWOINT(){ A=10 B=21 C=$[$A+$B] echo $C } echo `TWOINT`
函數執行結果的運算
#!/bin/bash # TWOINT(){ A=10 B=21 C=$[$A+$B] echo $C } M=10 SUM=$[$M+`TWOINT`] echo $SUM
函數執行狀態結果:
echo $?
自定義執行狀態返回值:
return #(如果執行的時候遇到return,函數將退出)
0-255
#!/bin/bash # USERADD() { USERNAME=ogilvy if ! id -u $USERNAME &>/dev/null;then adduser $USERNAME echo "$USERNAME" | passwd --stdin $USERNAME &>/dev/null return 0 else return 1 fi } USERADD if [ $? -eq 0 ];then echo "$USERNAME add sucessful." else echo "$USERNAME existed." fi
接受參數的函數:
./a.sh m n
$1:m
$2:n
#!/bin/bash # USERADD() { USERNAME=$1 if ! id -u $1 &>/dev/null;then adduser $1 echo "$1" | passwd --stdin $1 &>/dev/null return 0 else return 1 fi } for I in {10..20};do USERADD user$I if [ $? -eq 0 ];then echo "user$1 add sucessful." else echo "user$1 existed." fi done
示例:
利用腳本跟參數,實現指定添加或刪除參數,並以腳本中指定的用戶列表添加用戶:
#!/bin/bash # USERADD() { if ! id $1 &>/dev/null;then useradd $1 echo $1 | passwd --stdin $1 &>/dev/null return 0 else return 1 fi } USERDEL() { if id $1 &>/dev/null;then userdel -r $1 return 0 else return 2 fi } MAN() { cat << EOF --add,useradd in /tmp/usertest.txt file. --del,userdel in /tmp/usertest.txt file. q|Q,quiting useradmin.sh EOF } MAN read -p "Enter your options --add|--del: " OPTION until [ $OPTION == 'Q' ] || [ $OPTION == 'q' ];do case $OPTION in --add) for I in `cat /tmp/usertest.txt`;do USERADD $I if [ $? -eq 0 ];then echo -e "\033[31m$I add sucssful.\033[0m" else echo -e "\033[31m$I existded.\033[0m" fi done ;; --del) for I in `cat /tmp/usertest.txt`;do USERDEL $I if [ $? -eq 0 ];then echo -e "\033[31m$I del sucssful.\033[0m" else echo -e "\033[31m$I not existed.\033[0m" fi done ;; esac read -p "Enter your options --add|--del again: " OPTION done