1. 程式人生 > 實用技巧 >【shell】【二】基本命令

【shell】【二】基本命令

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 基本運算子

  • 算數運算子
  • 關係運算符
  • 布林運算子
  • 字串運算子
  • 檔案測試運算子
# 運算子,expr 是一款表示式計算工具,使用它能完成表示式的求值操作。 val=`expr 1 + 1` echo $val 注意:表示式和運算子之間要有空格,1+1正確

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 test

9.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

9.5、顯示結果儲存到檔案

echo "It is a test" > myfile

9.6、顯示命令字元對應的結果

echo `date` 注意:這裡使用的是反引號`, 而不是單引號'。 結果將顯示當前日期 2020年 7月28日 星期二 15時05分27秒 CST