組合條件測試:在多個條件間實現邏輯運算
與:[ condition1 -a condition2 ]、condition1 && condition2 或:[ condition1 -o condition2 ]、condition1 || condition2 非:[ -not condition ]、[ ! condition ]
1.整型測試(整數比較)
運算符 描述 示例 num1 -gt num2 大于 [ $num -gt 100 ] num1 -lt num2 小于 [ $num -lt 100 ] num1 -ge num2 大于等于 [ $num -ge 100 ] num1 -le num2 小于等于 [ $num -le 100 ] num1 -eq num2 等于 [ $num -eq 100 ] num1 -ne num2 不等于 [ $num -ne 100 ]
2.字符測試(字符串比較)
運算符 描述 示例 test "${String1}" \> "${String2}" String1 > String2 如果字String1大于String2,則為真 [ "${String1}" \> "${String2}" ] [[ "${String1}" > "${String2}" ]] test "${String1}" \< "${String2}" String1 < String2 如果字String1小于String2,則為真 [ "${String1}" \< "${String2}" ] [[ "${String1}" < "${String2}" ]] test "${String1}" =="${String2}" String1 == String2 如果字String1等于String2,則為真 [ "${String1}" =="${String2}" ] [[ "${String1}" =="${String2}" ]] test "${String1}" !="${String2}" String1 != String2 如果字String1不等于String2,則為真 [ "${String1}" !="${String2}" ] [[ "${String1}" !="${String2}" ]] -n String 如果String長度為零,則為真 [ -n "${myvar}"] -z String 如果String長度為非零,則為真 [ -z "${myvar}" ] 注意: 字符串必須用單引號或雙引號引起來,有變量必須用雙引號。 test與[]是shell命令,所以字符串比較操作符“<"、">"必須轉義。
3.文件測試(判斷文件是否存在及其屬性)
參數 描述 示例 -e 文檔存在則為真,同-a [[ -e /tmp ]] -f 文檔存在且為普通文件則為真 [[ -f /etc/passwd ]] -d 文檔存在且為目錄則為真 [[ -d /tmp ]] -L 文檔存在且為符號鏈接為件則為真,同h [[ -L /dev/stdin ]] -b 文檔存在且為塊設備則為真 [[ -b /dev/xvda ]] -c 文檔存在且為字符設備則為真 [[ -c /dev/zero ]] -S 文檔存在且為套接字文件則為真 [[ -S /dev/log ]] -p 文檔存在且為命令管道則為真 [[ -p /var/run/autofs.fifo-net ]] -s 文檔存在且為非空文件則為真 [[ -s /etc/passwd ]] -r 文檔存在且具有可讀權限則為真 [[ -r /etc/passwd ]] -w 文檔存在且具有可寫權限則為真 [[ -w /etc/passwd ]] -x 文檔存在且具有可執行權限則為真 [[ -x /etc/init.d/dhcpd ]] -u 文檔存在且具有SUID屬性則為真 [[ -u a.txt ]] -g 文檔存在且具有SGID屬性則為真 [[ -g a.txt ]] -nt file1的mtime新于file2則為真 [[ a.txt -nt b.txt ]] -ot file1的mtime舊于file2則為真 [[ a.txt -ot b.txt ]]
綜合示例:
例1:如果當前主機名為空或者為“localhost”,則將其修改為chenss
#!/bin/bash # host_name=$(hostname) [ -z "${host_name}" -o "${host_name}" == "localhost" ] && hostname chenss
例2:執行腳本,提示輸入用戶名,如果無此用戶,則報錯且繼續提示輸入用戶名;如果UID等于0,則提示是root用戶;如果大于0小于500,則提示是系統用戶;否則,提示是普通用戶。
#!/bin/bash # until [ "${user_name}" == "q" -o "${user_name}" == "quit" ] ; do read -p "PLS enter a username: " user_name user_id=$(id -u ${user_name}) if ! id -u ${user_name} &> /dev/null; then continue elif [[ ${user_id} -eq 0 ]] ; then echo "It's a root user." elif [ ${user_id} -gt 0 -a ${user_id} -lt 500 ]; then echo "It's a system user." else echo "It's a common user." fi done
例3:添加10個用戶,如果用戶存在,則顯示有此用戶并把用戶名標紅,如果不存在,則添加并把用戶名背景色標綠,且顯示一共添加了多少用戶。
#!/bin/bash # declare -i num=0 for i in {1..10}; do if id -u test$i &> /dev/null; then echo -e "user 33[0;31;1mtest$i33[0m is exists." else useradd test$i && echo -e "33[0;42;1mtest$i33[0m add succesfully." let num++ fi done echo "Total add $num users."
原創文章,作者:老鼠上了貓,如若轉載,請注明出處:http://www.www58058.com/7166