bash中if的幾種用法
if command
then
command
fitest for number and strings
if test expression
then
command
fior
if [ string/numeric expression ] then
command
fitest for strings
if[[ string expression ]] then
command
filet for numbers
if (( numeric expression ))
if [ $answer = y -o "$answer" = y ]
[: too many arguments
$answer 與 "$answer"的不同在於加雙引號後只當做singel string,如果test命令的左邊是多個string就會出錯。
老式的只能用-a來表示與,而新式的可以用&&來表示與。
if中的null運算子
列子datafil=
: $echo $datafile
:$echo $datafile
:相當於乙個空函式,$相當於往函式中傳遞引數,:=叫做modifier,如果datafile不為空,則不會被賦值,否則就會被賦值。
apend:
shell中的括號比較多,總結下主要的用法:
1、變數原型$
例如:#!/bin/bash
tail=
for filename in `ls`
do mv $filename $.$tail
done
2、$() 命令替換
命令替換: 等同於 `cmd` : shell掃瞄一遍命令列,發現了$(cmd)結構,便將$(cmd)中的cmd執行一次,得到其標準輸出,再將此輸出放到原來命令
3、一串的命令執行()和{}
a ()只是對一串命令重新開乙個子shell進行執行,{}對一串命令在當前shell執行
b ()和{}都是把一串的命令放在括號裡面,並且命令之間用;號隔開
c ()最後乙個命令可以不用分號, {}最後乙個命令要用分號
d {}的第乙個命令和左括號之間必須要有乙個空格,()裡的各命令和括號不必有空格
e ()和{}中括號裡面的某個命令的重定向只影響該命令,但括號外的重定向則影響到括號裡的所有命令
$ var=test
$ (var=notest; echo $var) ###變數var值為notest,只是在子shell中有效,
notest
$ echo $var ###變數var在父shell中值仍為test
test
$ ###注意左括號和var之間要有乙個空格
notest
$ echo $var ###父shell中的var變數的值變為了notest
notest
$ ###輸出test1被重定向到檔案a中,
test2 ###而test2輸出則仍輸出到標準輸出中。
$ cat a
test1
$ >a ###括號內命令的標準輸出全部被重定向到檔案a中
$ cat a
test1
test2
4、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
5、中括號:test
a. test 和 [ 是 bash 的內部命令,[和test是等同的。如果我們不用絕對路徑指明,通常我們用的都是 bash 自帶的命令。
test和中可用的比較運算子只有==和!=,兩者都是用於字串比較的,不可用於整數比較,整數比較只能使用-eq, -gt這種形式。無論是字串比較還是整數比較都千萬不要使用大於號小於號。當然,如果你實在想用也是可以的,對於字串比較可以使用尖括號的轉義形式,如果比較"ab"和"bc":[ ab \< bc ],結果為真,也就是返回狀態為0.
b. [[ 是 bash 程式語言的關鍵字
[ ]],這是內建在shell中的乙個命令,比test強大的多了。支援字串的模式匹配(使用=~操作符時甚至支援shell的正規表示式)。
字串比較時可以把右邊的作為乙個模式,而不僅僅是乙個字串,比如[[ hello == hell? ]],結果為真。 在
[[ 中使用 && 和 || ,[ 中使用 -a 和 -o 表示邏輯與和邏輯或。
[[ 中匹配字串或萬用字元,不需要引號 . [ 不能使用正則
#!/bin/bash
echo $
if [[ $var == str* ]]
執行結果為 yes
#!/bin/bash
echo $
if [ $var == str -o $var != str ] ## 需要使用單括號,使用雙括號的形式為:if [[ $var == str ]] || [[ $var != str ]]
6、特殊用法:
$若變數var為空,則在命令列中用string來替換$,var
本身的值不變;否則變數var不為空時,則用變數var的值來替換
$$與上是一樣的,所不同之處是:若var為空時,用string替換$的同時,把string賦給變數var。
$的替換規則和上面的相反,即只有當var不是空的時候才替換成string,但是
var本身的值不變;
若var為空時則不替換或者說是替換成變數 var的值,即空值。(因為變數var此時為空,所以這兩種說法是等價的)
$若變數var不為空,則用變數var的值來替換$;若變數var為空,則把string輸出到標準錯誤中,並從指令碼中退出。我們可利用此特性來檢查是否設定了變數的值。
shell中單引號 雙引號,小括號 大括號的使用
一 shell中單引號 和雙引號 1 當使用echo來列印出固定字串常量時,不帶引號 帶單引號和帶雙引號,其輸出結果相同,如下 2 當使用echo來列印出變數的資訊時,使用單引號將不會去解析變數的名稱,而是直接將單引號中的內容列印處理,不帶引號或是使用雙引號將會解析出變數後將其列印 二 shell中...
Bash指令碼中括號和反引號的使用
在bash指令碼中,我們經常需要引用變數或者命令的執行結果來作為檔案的名字或者日誌的輸出,在指令碼或者shell中我們可以使用反引號 或者括號 來獲取到變數的內容 示例 1 獲取日期的輸出 echo date output 2021年 01月 05日 星期二 15 21 23 cstecho dat...
shell 引號 括號 用法詳解
1 單引號 雙引號 反引號區別 單引號 雙引號用於當變數出現空格時,用引號括起來,加以區分 單雙引號的區別 單引號括起來的所有字元都是普通字元,就算是特殊字元也等同為普通字元 雙引號中的 以及反引號都是有特殊含義的,表示引用變數的值,反引號表示引用命令 反引號 命令 和 命令 的的作用是一樣的,呼叫...