shell腳本之條件測試

組合條件測試:在多個條件間實現邏輯運算

    與:[ 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

(1)
老鼠上了貓老鼠上了貓
上一篇 2015-08-24 18:27
下一篇 2015-08-24 21:28

相關推薦

  • DNS and BIND 介紹及安裝

    DNS DNS是什么 為什么要用DNS 域名 BIND DNS是什么 DNS:Domain Name System,域名系統DNS作為域名和IP地址相互映射的一個分布式數據庫,能夠讓用戶更方便的訪問互聯網。它的正向映射是吧一個主機和IP地址關聯起來,它的反向映射則是IP地址到主機名。DNS協議運行在UDP協議上,使用53端口。 為什么要用DNS 連接到互聯網…

    Linux干貨 2016-05-28
  • Linux發展史

    簡 述 Linux是一套自由加開放源代碼的類Unix操作系統,誕生于1991年10月5日(第一次正式向外公布),由芬蘭學生Linus Torvalds和后來陸續加入的眾多愛好者共同開發完成。 Linux是一個基于POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操作系統。它能運行主要的Unix工具軟件、應用程序和網絡協議,可支持32位和64位硬件。…

    2016-10-14
  • 馬哥教育網絡班22期+第3周課程練習

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 [root@localhost ~]# w | tail -n+3 | cut -d" " -f1 | sort |&…

    Linux干貨 2016-08-29
  • 每天一個Linux命令

        程序管理:      程序的組成部分:二進制程序文件,庫文件,配置文件,幫助文件。                      二進制和庫文件可執行,庫文件不能獨立執行,只能被調用時執…

    Linux干貨 2017-04-08
  • N22-第二周作業

    1、文件管理類命令有:cp,mv,rm    cp:復制命令      用法:cp [OPTION]… SOURCE… DEST        如果DEST不存在,則先創建此文件并復制源…

    Linux干貨 2016-08-29
  • 理解基本權限以及特殊權限:Suid 、Sgid、Sticky以及acl

    理解基本權限以及特殊權限:Suid 、Sgid、Sticky以及acl 在Linux中特殊權限是什么?為什么要設定特殊權限?回答這個問題前,我們不妨思考為什么要設定權限? 大家知道Linux中一切皆文件。不論你是什么,在linux系統中都會被當做一個文件來看待。無論你是文本或目錄,硬件或軟件,圖片或視頻等等,統統都被當做文件來看待。所以,在linux中,文件…

    Linux干貨 2017-04-08
欧美性久久久久