【shell】【二】基本命令
阿新 • • 發佈:2020-07-28
1、新建test.sh檔案
vim test.sh 進入vim介面,i進入編輯模式,輸入下面的程式碼,然後esc,進入底部命令模式,然後:wq!強制儲存並退出。1 #!/bin/bash 2 echo "hello word"或者直接用sublime等新建字尾是.sh的檔案。
2、給.sh檔案新增可執行許可權
1 chmod +x ./test.sh #使指令碼具有執行許可權 2 chmod 777 ./test.sh #777可讀可寫可執行
3、執行該檔案
1 ./test.sh #執行指令碼
4、shell變數
4.1.定義變數時,變數名不加美元符號
1 your_name="定義變數規則:runoob.com" 2 3 有效的變數名稱: 4 RUNOOB 5 LD_LIBRARY_PATH 6 _var 7 var2
- 變數名和等號之間不能有空格
- 命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
- 中間不能有空格,可以使用下劃線(_)。
- 不能使用標點符號。
- 不能使用bash裡的關鍵字(可用help命令檢視保留關鍵字)。
4.2.使用變數
以下兩種輸出方式都ok,但是儘量用第二種 your_name="runoob.com" echo $you_name echo ${you_name} echo I am good at ${you_name}Script . 會輸出完整的句子 echo I am good at $you_name Script 。 會將you_name理解為新的變數,值為空
4.3.只讀變數
1 #!/bin/bash 2 myUrl="http://www.google.com" 3 readonly myUrl 4 5 6 執行指令碼會報錯 7 /bin/sh: NAME: This variable is read only.
4.4.刪除變數
#!/bin/sh myUrl="http://www.runoob.com" unset myUrl echo $myUrl 注意:unset不能刪除只讀變數
4.5.變數型別
- 1) 區域性變數區域性變數在指令碼或命令中定義,僅在當前shell例項中有效,其他shell啟動的程式不能訪問區域性變數。
- 2) 環境變數所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常執行。必要的時候shell指令碼也可以定義環境變數。
- 3) shell變數shell變數是由shell程式設定的特殊變數。shell變數中有一部分是環境變數,有一部分是區域性變數,這些變數保證了shell的正常執行
4.6.字串操作
1 獲取字串長度# 2 string="abcd" 3 echo ${#string} #輸出 4 4 5 擷取字串 6 string="runoob is a great site" 7 echo ${string:1:4} # 輸出 unoo 8 9 查詢子字串 10 string="runoob is a great site" 11 echo `expr index "$string" io` # 輸出 4 12 注意: 以上指令碼中 ` 是反引號,而不是單引號 ',不要看錯了哦。
5、陣列
陣列中可以存放多個值。Bash Shell 只支援一維陣列(不支援多維陣列),初始化時不需要定義陣列大小(與 PHP 類似) Shell 陣列用括號來表示,元素用"空格"符號分割開1 定義陣列,在 Shell 中,用括號來表示陣列,陣列元素用"空格"符號分割開。定義陣列的一般形式為: 2 陣列名=(值1 值2 ... 值n) 3 array_name=(value0 value1 value2 value3) 4 或者 5 array_name=( 6 value0 7 value1 8 value2 9 value3 10 ) 11 或者 12 array_name[0]=value0 13 array_name[1]=value1 14 array_name[n]=valuen 15 16 讀取陣列 17 valuen=${array_name[n]} 18 19 使用 @ 符號可以獲取陣列中的所有元素,例如: 20 echo ${array_name[@]} 21 22 23 # 取得陣列元素的個數 24 length=${#array_name[@]} 25 # 或者 26 length=${#array_name[*]} 27 # 取得陣列單個元素的長度 28 lengthn=${#array_name[n]} 29 30 31 例子 32 arr=(9 2 'Aaa' 'B') 33 echo ${arr[@]} 34 echo ${arr[*]} 35 len=${#arr[*]} 36 echo $len 37 echo "陣列元素個數為: ${#arr[@]}" 38 39 40 輸出========= 41 ./test2.sh 42 9 2 Aaa B 43 9 2 Aaa B 44 4 45 陣列元素個數為: 4
6、註釋
1 單行註釋 2 #-------------------------------------------- 3 # 這是一個註釋 4 # author:菜鳥教程 5 多行註釋 6 :<<EOF 7 註釋內容... 8 註釋內容... 9 註釋內容... 10 EOF 11 或者 12 :<<' 13 註釋內容... 14 註釋內容... 15 註釋內容... 16 ' 17 18 :<<! 19 註釋內容... 20 註釋內容... 21 註釋內容... 22 !
7、Shell 傳遞引數
1 1、傳遞引數 2 echo "hi,no: $0" 3 echo "hi,no: $1" 4 echo "hi,no: $2" 5 6 執行 7 ./test1.sh 'one' 'two' 'three' 8 9 Hello World ! 10 hi,no: ./test1.sh -- 會把執行的那個檔名預設是第0個欄位 11 hi,no: one 12 hi,no: two 13 14 15 2、$*與$@的區別 16 都是引用所有的引數,但是$*是把出入的引數當成一個字串去展示,$@當成一個個的字元 17 echo "-- \$* 演示 ---" 18 for i in "$*"; do 19 echo $i 20 done 21 22 echo "-- \$@ 演示 ---" 23 for i in "$@"; do 24 echo $i 25 done 26 27 執行 28 ./test1.sh 'one' 'two' 'three' 29 -- $* 演示 --- 30 one two three 31 -- $@ 演示 --- 32 one 33 two 34 three
8、Shell 基本運算子
- 算數運算子
- 關係運算符
- 布林運算子
- 字串運算子
- 檔案測試運算子
8.1、算數運算子
1 #!/bin/bash 2 3 # 運算子,expr 是一款表示式計算工具,使用它能完成表示式的求值操作。1 + 1之間必須有空格 4 val=`expr 1 + 1` 5 echo $val 6 7 a=10 8 b=20 9 if [ a = b ] 10 then 11 echo "a等於b" 12 else 13 echo "a不等於b" 14 fi 15 16 a=10 17 b=20 18 19 val=`expr $a + $b` 20 echo "a + b : $val" 21 22 val=`expr $a - $b` 23 echo "a - b : $val" 24 25 val=`expr $a \* $b` 26 echo "a * b : $val" 27 28 val=`expr $b / $a` 29 echo "b / a : $val" 30 31 val=`expr $b % $a` 32 echo "b % a : $val" 33 34 if [ $a == $b ] 35 then 36 echo "a 等於 b" 37 fi 38 if [ $a != $b ] 39 then 40 echo "a 不等於 b" 41 fi
8.2、關係運算符
1 -eq =====equal等於 2 -ne =====not equal 不等於 3 -gt =====greater than a>b 4 -lt =====less than a<b 5 -ge =====greater than or equal a>=b 6 -le =====less than or equal a>=b 7 8 9 10 a=10 11 b=20 12 13 if [ $a -eq $b ] 14 then 15 echo "$a -eq $b : a 等於 b" 16 else 17 echo "$a -eq $b: a 不等於 b" 18 fi 19 if [ $a -ne $b ] 20 then 21 echo "$a -ne $b: a 不等於 b" 22 else 23 echo "$a -ne $b : a 等於 b" 24 fi 25 if [ $a -gt $b ] 26 then 27 echo "$a -gt $b: a 大於 b" 28 else 29 echo "$a -gt $b: a 不大於 b" 30 fi 31 if [ $a -lt $b ] 32 then 33 echo "$a -lt $b: a 小於 b" 34 else 35 echo "$a -lt $b: a 不小於 b" 36 fi 37 if [ $a -ge $b ] 38 then 39 echo "$a -ge $b: a 大於或等於 b" 40 else 41 echo "$a -ge $b: a 小於 b" 42 fi 43 if [ $a -le $b ] 44 then 45 echo "$a -le $b: a 小於或等於 b" 46 else 47 echo "$a -le $b: a 大於 b" 48 fi
8.3、布林運算子
1 a=10 2 b=20 3 if [ $a != $b ];then 4 echo "$a != $b : a不等於b" 5 else 6 echo "$a == $b : a等於b" 7 fi 8 if [ $a -lt 100 -a $b -gt 15 ] 9 then 10 echo "$a 小於 100 且 $b 大於 15 : 返回 true" 11 else 12 echo "$a 小於 100 且 $b 大於 15 : 返回 false" 13 fi 14 if [ $a -lt 100 -o $b -gt 100 ] 15 then 16 echo "$a 小於 100 或 $b 大於 100 : 返回 true" 17 else 18 echo "$a 小於 100 或 $b 大於 100 : 返回 false" 19 fi 20 if [ $a -lt 5 -o $b -gt 100 ] 21 then 22 echo "$a 小於 5 或 $b 大於 100 : 返回 true" 23 else 24 echo "$a 小於 5 或 $b 大於 100 : 返回 false" 25 fi
8.4、邏輯運算子
1 a=10 2 b=20 3 4 if [[ $a -lt 100 && $b -gt 100 ]];then 5 echo "返回 true" 6 else 7 echo "返回 false" 8 fi 9 10 if [[ $a -lt 100 || $b -gt 100 ]];then 11 echo "返回 true" 12 else 13 echo "返回 false" 14 fi
8.5、字串運算子
1 a="abc" 2 b="efg" 3 4 if [ $a = $b ] 5 then 6 echo "$a = $b : a 等於 b" 7 else 8 echo "$a = $b: a 不等於 b" 9 fi 10 if [ $a != $b ] 11 then 12 echo "$a != $b : a 不等於 b" 13 else 14 echo "$a != $b: a 等於 b" 15 fi 16 if [ -z $a ] 17 then 18 echo "-z $a : 字串長度為 0" 19 else 20 echo "-z $a : 字串長度不為 0" 21 fi 22 if [ -n "$a" ] 23 then 24 echo "-n $a : 字串長度不為 0" 25 else 26 echo "-n $a : 字串長度為 0" 27 fi 28 if [ $a ] 29 then 30 echo "$a : 字串不為空" 31 else 32 echo "$a : 字串為空" 33 fi
8.6、檔案測試運算子
9、echo 命令
9.1、輸出普通字串
echo "It is a test" 結果:It is a test9.2、顯示轉義字元
echo "\"It is a test\""結果:"It is a test"
9.3、顯示變數
#!/bin/sh read name echo "$name It is a test"
結果: OK #標準輸入 OK It is a test #輸出
9.4、顯示換行
echo -e "OK! \n" # -e 開啟轉義 echo "It is a test"
結果: OK! It is a test