1、Shell中變量的原形:${var} 一串命令的執行(代替變量)
#等價於 $ var=test $ echo $var test #例如,用在這個位置 $ echo ${var}AA testAA
2、命令替換$(cmd) 一串命令的執行(替換命令)
命令替換$(cmd)和符號`cmd`(注意這不是單引號,在美式鍵盤上,`是ESC下面的那個鍵)有相同之處
$ ls a b c $ echo $(ls) a b c $ echo `ls` a b c
我們來分析一下命令echo $(ls),以便理解所謂命令替換是什么意思:
shell掃描一遍命令行,發現了$(cmd)結構,便將$(cmd)中的cmd執行一次,得到其標准輸出,再將此輸出放到原來命令echo $(ls)中的$(ls)位置,即替換了$(ls),再執行echo命令。
()和{}都是對一串的命令進行執行,但有所區別:
A,()只是對一串命令重新開一個子shell進行執行
B,{}對一串命令在當前shell執行
3、POSIX標准的擴展計算:$((exp)) 用於數學計算(整數的比較和運算)
這種計算是符合C語言的運算符,也就是說只要符合C的運算符都可用在$((exp)),甚至是三目運算符。
注意:這種擴展計算是整數型的計算,不支持浮點型.若是邏輯判斷,表達式exp為真則為1,假則為0。
$ echo $((3+2)) 5 $ echo $((3>2)) 1 $ echo $((25<3 ? 2:3)) 3 $ echo $var $ echo $((var=2+3)) 5 $ echo $var 5 $ echo $((var++)) 5 $ echo $var 6
4、單中括號 [] 對於轉義字符要加\ eg:[ \($INT\)]
bash 的內部命令, [ 和 test 是等同的。
Test和[]中可用的比較運算符只有==和!=,兩者都是用於字符串比較的,不可用於整數比較,整數比較只能使用-eq,-gt這種形式。無論是字符串比較還是整數比較都不支持大於號小於號。
因為[ 是Linux內部命令,所以 [ a+b ]之間要有空格。
5、雙中括號[[ ]] 不用加斜杠轉義eg: [[ ($INT) ]] 較常用
[[是 bash 程序語言的關鍵字。使用[[ ... ]]條件判斷結構。比如,&&、||、<和> 操作符能夠正常存在於[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯。
4、5例如:
if ($i<5) if [ $i -lt 5 ] if [ $a -ne 1 -a $a != 2 ] if [ $a -ne 1] && [ $a != 2 ] if [[ $a != 1 && $a != 2 ]] for i in $(seq 0 4);do echo $i;done for i in `seq 0 4`;do echo $i;done for ((i=0;i<5;i++));do echo $i;done for i in {0..4};do echo $i;done
https://my.oschina.net/tridays/blog/807162
最后,推薦使用 [[
來進行各種判斷,這能避免很多錯誤,比如 $a
為空的情況下,[ $a == 1 ]
就是語法錯誤,因為 [
命令拿到的實際上只有 ==
、1
、]
三個參數。即:[[]]常用些。
$ [ 1 < 2 ] zsh: no such file or directory: 2 #------------------------------------- $ [[ 1 < 2 ]] && echo True || echo False True
首先,來看下shell中$與各種括號的結合:
$( )運行shell命令返回輸出
如$(ls -a)
$(( )) 算術運算
如$(($a+$b))
$[] 算術運算
如$[$a+$b]
${ } 變量調用
如${$var}
再來看看單獨使用的情況:
( ) 正則表達式中可以表示分組,並在后面通過\1,\2等調用
[ ] 測試表達式
[[ ]] 測試表達式
{ }可用於括起整個命令塊
實在是不好記,於是,小林君又反過來總結變量調用、命令調用、測試表達式和算術運算的方法:
變量調用:
方法一:${var}
方法二:$var
命令調用:
方法一:`COMMAND`
方法二:$(COMMAND)
測試表達式:
方法一:[ expression ]
方法二:[[ expression ]]
方法三:test expression
算術運算
方法一:let 算術運算表達式
let C=$A+$B 這里變量A和B前面的$可以省略
方法二:$[算術運算表達式]
C=$[$A+$B]
方法三:$((算術運算表達式))
C=$(($A+$B))
方法四:expr 算術運算表達式,表達式中各操作數及運算符之間要有空格,而且要使用命令引用,遇到乘法的*號還要轉義
C=`expr $A + $B`
方法五:expr $[算術運算表達式],遇到乘法*號不用轉義。
dd