Linux系統Bash(Shell)基礎知識(3)

來源:互聯網
上載者:User

標籤:基礎知識   linux   運算式   

  在shell指令碼編程中算術運算無疑是十分重要的;

  bash中執行整數算數運算的命令是let,其文法格式為:

  let arg...

  arg為單獨的算術運算式如+,-,*,/,%,^等所構成的完整的算術運算式;

  其中^為平方運算,如2^3表示2的三次方;

  let命令可以使用如下方式替代:

  ((算術運算式))

  例如

  [[email protected] wjq]# let "a=2*3"

  [[email protected] wjq]# echo $a

  6

  [[email protected] wjq]# (("a=3*3"))

  [[email protected] wjq]# echo $a

  9


  除了簡單的加減乘除運算,算術運算中還包括增強型運算方式和特殊的增強型運算方式;

  增強型運算方式:

  +=:如a+=b-->a=a+b

  -+:如a-=b-->a=a-b

  *=:如a*=b-->a=a*b

  %=:如a%=b-->a=a%b

  /=:如a/=b-->a=a/b

  轉化為let命令運算為:

  [[email protected] wjq]# b=5

  [[email protected] wjq]# let "a+=b"

  [[email protected] wjq]# echo $a

  14

  [[email protected] wjq]# 

  特殊增強型運算:

  a++:a先將值賦給變數,再+1;

  ++a:a先+1,再將值賦給變數;

  a--:a先將值賦給變數,再-1;

  --a:a先-1,再將值賦給變數;

  轉化為let命令的運算方式為:

  [[email protected] wjq]# a=4

  [[email protected] wjq]# b=5

  [[email protected] wjq]# let "a++"

  [[email protected] wjq]# let "a+=b"

  [[email protected] wjq]# echo $a

  10


  算術運算方法:

  ① let VAR=算術運算式

    #let “B=5+4”

    #echo $B

    將算術運算式先行進行算術運算,並將運算得到的結果儲存到變數VAR;

    變數:儲存資料的容器

    弱變數:弱類型變數,預設是字元型變數,數值型(不包括浮點型)


  ② VAR=$[算術運算式]

  [[email protected] wjq]# a=$[a*b]

  [[email protected] wjq]# echo $a

  50


  ③ VAR=$((算術運算式))

  算術運算式中如果有引用就用$引用,也可以省略

  [[email protected] wjq]# a=$((a*b))

  [[email protected] wjq]# echo $a

  250


  ④ exper ARGU1 ARGU2 ARGU3

          ARGU1和ARGU3 必須是數值

          ARGU2是運算子


  ⑤ echo “算術運算式” | bc(bc命令相當於計算機)

  [[email protected] wjq]# echo "3*4" | bc

  12


 條件測試語句:

  條件測試有三種測試語句

  一是test命令;

  二是用一堆方括弧將其括起來,而這是完全等價的;

  test -f "/etc/passwd" 完全等價於 [ -f "/etc/passwd" ]

  三是[[條件運算式]];

  這三種運算式可以和多種系統運算子結合使用,這些系統運算子可以分為四類:數值測試運算子,字串測試運算子,檔案狀態測試運算子,邏輯測試運算子;

  下列四種運算子皆在此使用第二種表達方式表示;

  

  資料測試運算子:使用雙目操作符進行運算;

  [ n1 -eq n2 ]:測試n1和n2是否相等,相等為真,不等為假

  [ n1 -ne n2 ]:測試n1和n2是否不相等,不等為真,相等為假;

  [ n1 -lt n2 ]:測試的n1和n2,左邊的是否小於右邊的,小於為真,大於為假;

  [ n1 -gt n2 ]:測試的n1和n2,左邊的是否大於右邊的,大於為真,小於為假;

  [ n1 -le n2 ]:測試的n1和n2,左邊的是否小於等於右邊的;

  例

  [[email protected] wjq]# [ "$a" -eq 0 ] && echo "a等於0" || echo "a不等於0"

  a不等於0


  字串測試運算子:

  使用單目運算子進行操作;

  -z ‘n1’:如果字串長度為0,則測試條件為真;

  -n ‘n1’:如果字串長度不為0;非空為真,空為假;

  [[email protected] wjq]# a=‘string‘

  [[email protected] wjq]# [ -z "$a" ] && echo "a等於0" || echo "a不等於0"

  a不等於0

  使用雙目運算子進行操作:

  ==|=:被測試的兩個字串是否相等,相同為真,不同為假;

  !=:被測試的兩個字元是否不相同,不同為真,相同為假;

  >:被測試的兩個字串在轉化為ascll碼後的位元據;左邊是否大於右邊,大於為真,小於為      假;

  >:被測試的兩個字串在轉化為ascll碼後的位元據,左邊是否小於右邊,小於為真,大於為      假;

  例

  ①

  [[email protected] wjq]# a=‘string‘

  [[email protected] wjq]# b=‘string‘

  [[email protected] wjq]# [ "$a" == "$b" ] && echo "a等於b" || echo "a不等於b"

  a等於b

  ②

  [[email protected] wjq]# a=‘string‘

  [[email protected] wjq]# b=‘str‘

  [[email protected] wjq]# [ "$a" != "$b" ] && echo "a不等於b" || echo "a等於b"

  a不等於b

  ③

  [[email protected] wjq]# a=‘string‘

  [[email protected] wjq]# b=‘str‘

  [[email protected] wjq]# [ "$a" > "$b" ] && echo "a大於b" || echo "a小於b"

  a大於b


  檔案狀態測試運算子:單目測試運算子;

  檔案存在性測試,如果測試的檔案存在為真,不存在為假;

  -a|-e:

  例

  [[email protected] wjq]# [ -a ./8yu ] && echo "檔案存在" || echo "檔案不存在"

  檔案存在


  檔案類型測試(測試存在性)

  -b file:若檔案存在並且為塊裝置,則測試為真;

  -c file:若檔案存在並且為字元裝置,則測試為真;

  -d file:若檔案存在並且為目錄裝置,則測試為真;

  -f file:若檔案存在並且為文字文件,則測試為真;

  -h|-L file:若檔案為存在並且為符號連結檔案,則測試為真;

  -p file:若檔案存在並且為通訊端檔案,則測試為真;

  例

  [[email protected] wjq]# [ -f ./8yu ] && echo "檔案為文字文件" || echo "檔案不是文字文件"

  檔案為文字文件

  

  檔案的存取權限設定:

  -r file:若檔案存在並且是使用者可讀,則測試為真;

  -w file:若檔案存在並且是使用者可寫,則測試為真;

  -x file:若檔案存在並且是使用者可執行檔,則測試為真;

  例

  [[email protected] wjq]# [ -r ./8yu ] && echo "檔案可讀" || echo "檔案不可讀"

  檔案可讀

  [[email protected] wjq]# [ -w ./8yu ] && echo "檔案可寫" || echo "檔案不可寫"

  檔案可寫

  [[email protected] wjq]# [ -x ./8yu ] && echo "檔案可執行" || echo "檔案不可執行"

  檔案可執行

 

  檔案特殊許可權標識測試:

  -u file:若檔案存在並且設定了SUID許可權,則測試為真;否則為假;

  -g file:若檔案存在並且設定了SGID許可權,則測試為真;否則為假;

  -k file:若檔案存在並且設定了sticky許可權,則測試為真;否則為假;

  例

  [[email protected] wjq]# [ -u ./8yu ] && echo "檔案存在SUID許可權" || echo "檔案不存在SUID權   限"

  檔案不存在SUID許可權

  [[email protected] wjq]# [ -g ./8yu ] && echo "檔案存在SGID許可權" || echo "檔案不存在SGID權   限"

  檔案不存在SGID許可權

  [[email protected] wjq]# [ -k ./8yu ] && echo "檔案存在STICKY許可權" || echo "檔案不存在     STICKY許可權"

  檔案不存在SUID許可權


  檔案所有權測試:

  -O file:若檔案存在並且其屬主為當前有效使用者,則測試為真;否則為假;

  -G file:若檔案存在並且其屬組是為當前有效使用者,則測試為真;否則為假;

  例

  [[email protected] wjq]# [ -O ./8yu ] && echo "檔案存在且其屬主為當使用者" || echo "檔案不存   在"

  檔案不存在

  [[email protected] wjq]# ls ./8yu

  ./8yu

  [[email protected] wjq]# ls -l ./8yu

  -rwxrw-r--. 1 wjq wjq 71 3月  27 20:39 ./8yu


  檔案內容是否為空白:

  -s file:若檔案存在並且內容不為空白,存在且內容不為空白則為真;否則為假;

  

  時間戳記測試:

  -N file:被測試檔案自從上一次被修改之後,是否被修改過;

  

  邏輯測試運算子:

  ① !:邏輯非(NOT),他放在任何錶達式前,是原來為真的運算式變為假,使原來為假的運算式變為真;

  ② -a:邏輯與(AND),他放在兩個邏輯運算式之間,僅當兩個都為真時,結果才為真;

  例:

  [ -f ./8yu -a -f ./aa ]

  ③ -o:邏輯或(OR),他放在兩個邏輯運算式中間,其中只要有一個為真,結果才為真;

  例:

  [ -f ./8yu -o -f ./aa ]

  

  兩種運算式等價:

  第一種運算式:

  [ -O /tmp/test ] && [ -s /tmp/test ]

  [ -O /tmp/test ] || [ -s /tmp/test ]

  第二種運算式:

  [ -O /tmp/test -a -s /tmp/test ]

  [ -O /tmp/test -o -s /tmp/test ]

  [ ! -O /tmp/test ]


Linux系統Bash(Shell)基礎知識(3)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.