一、算術運算
Bash中的算術運算方法有一下幾種:
1.使用let命令
kdyzm@kdyzm:~$ let A=1+2 kdyzm@kdyzm:~$ echo $A 3 kdyzm@kdyzm:~$
2.$[expression]
kdyzm@kdyzm:~$ A=$[1+2] kdyzm@kdyzm:~$ echo $A 3 kdyzm@kdyzm:~$
3.$((expression))
kdyzm@kdyzm:~$ B=$((1+2)) kdyzm@kdyzm:~$ echo $B 3 kdyzm@kdyzm:~$
4.使用expr命令
kdyzm@kdyzm:~$ expr 1+2 1+2 kdyzm@kdyzm:~$ expr 1 + 2 3 kdyzm@kdyzm:~$
上面的運算結果顯示使用expr表達式需要注意操作符兩側必須帶有空格,否則被識別爲字符串類型。
二、文件測試
文件測試也是使用test命令,同樣可以簡寫成爲[expression]
test -b FILE:文件存在而且是塊設備文件 -c FILE:文件存在而且是字符設備文件 -d FILE:文件存在而且是目錄 -e FILE:文件存在 -f FILE:文件存在而且是一個普通文件 -h|-L FILE:文件存在而且是一個鏈接文件 -p FILE:文件存在而且是一個命名管道文件 -S FILE:文件存在而且是一個套接字文件 -s FILE:文件存在而且大小不爲0 -r FILE:文件存在而且可讀(當前用戶) -w FILE:文件存在而且可寫(當前用戶) -x FILE:文件存在而且可執行(當前用戶)
三、字符測試
字符測試是使用test命令,同樣可以簡寫成爲[expression]
test -n STRING:字符串長度不爲0 -z STRING:字符串長度爲0 STRING1 = STRING2 :兩個字符串相同 STRING1 != STRING2 :兩個字符串不相同
四、位置變量與特殊變量
1.特殊變量
$? :命令執行狀態結果,0表示成功,1-255表示失敗 $# :參數的個數 $* :參數列表 $@ :參數列表
2.位置變量
bash中使用位置變量能夠直接引用命令參數,$1表示第一個參數,$2表示第二個參數,,,,,
3.使用shift命令
shift
shift命令能夠“刪除”掉參數列表中的第一個參數,使得是使用$1訪問原來參數列表中的第二個參數。
多次使用shift命令的結果以此類推。
五、雜項
1.自定義退出碼
exit n
使用exit能夠退出腳本,如果只是單獨的使用一個exit命令,,沒有定義退出碼,使用最後執行的一條命令的執行狀態結果作爲退出碼。
2.使用bash命令檢測腳本文件是否有語法錯誤
bash -n FILE :檢測腳本穩健是否有語法錯誤 bash -x FILE :單步執行,將每一步的執行過程打印到屏幕
六、練習
1.寫一個腳本,能夠接收一個參數,判斷該參數是否是一個文件,如果是,則打印文件類型,否則提示文件不存在。
#!/bin/bash if [ -e $1 ];then file $1 else echo "No such file !" fi
2.寫一個腳本,給該腳本傳遞兩個參數,顯示兩個數的和與乘積,如果參數不夠則進行提示並退出。
#!/bin/bash if [ $# -lt 2 ];then echo "USAGE : test4.sh ARG1 ARG2" exit 1 fi echo "$1+$2=$[$1+$2]" echo "$1*$2=$[$1*$2]"
3.傳遞三個參數給腳本,第一個數是整數,第二個是操作符,第三個數是整數,將計算結果計算出來顯示在屏幕上。
#!/bin/bash echo $@ if [ $# -lt 3 ] ;then echo "USAGE : calculate.sh VAR1 OPERATOR VAR2" exit 1 fi VAR1=$1 OP=$2 VAR2=$3 if [ $OP = '+' ];then echo "$VAR1+$VAR2=$[$VAR1+$VAR2]" exit 0 elif [ $OP = '-' ];then echo "$VAR1-$VAR2=$[$VAR1-$VAR2]" exit 0 elif [ $OP = '*' ];then echo "$VAR1*$VAR2=$[$VAR1*$VAR2]" exit 0 elif [ $OP = '/' ];then echo "$VAR1/$VAR2=$[$VAR1/$VAR2]" exit 0 else echo "The Operator must be +-*/" exit 1 fi
這裏還有一個非常重要的問題需要注意,在運行該命令的時候,輸入形式應當如下所示:
kdyzm@kdyzm:~/scripts$ ./calculate.sh 2 '\*' 3 2 \* 3 The Operator must be +-*/ kdyzm@kdyzm:~/scripts$
首先,操作符必須使用''括起來,同時,需要用反斜線轉義操作符:
+ -> '\+' - -> '\-' * -> '\*' / -> '\/'
這麼做是有原因的,特別是*符號,它有在bash中有特殊的含義,使用
echo 2 * 3
命令,將會顯示如下結果:
kdyzm@kdyzm:~$ echo 2 * 3 2 a.txt b.txt datastructure Desktop Documents Downloads examples.desktop Music Pictures ProgramFiles Public scripts SoftWare Templates Untitled Document Untitled Document~ Videos 3 kdyzm@kdyzm:~$
* 在這裏會被bash解析成“顯示所有文件”的意思,所以必須對其進行轉義,使用'\'進行轉義,但是僅僅這樣還不夠,必須得加上''表示強引用才行,否則的話還是會被解析;這裏使用echo $@命令查看參數列表。