1、begin #! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell。 echo 命令用於向視窗輸出文本。 2、運行shell的2種方式 2.1、作為可執行程式 將上面的代碼保存為 test.sh,並 cd 到相應目錄: 2.2、作為解釋器參數 這種運行方式是,直 ...
1、begin
1 #!/bin/bash
2 echo "Hello World !"
#! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell。
echo 命令用於向視窗輸出文本。
2、運行shell的2種方式
2.1、作為可執行程式
將上面的代碼保存為 test.sh,並 cd 到相應目錄:
1 chmod +x ./test.sh #使腳本具有執行許可權
2 ./test.sh #執行腳本
2.2、作為解釋器參數
這種運行方式是,直接運行解釋器,其參數就是 shell 腳本的文件名,如:
1 /bin/sh test.sh
2 /bin/php test.php
這種方式運行的腳本,不需要在第一行指定解釋器信息,寫了也沒用。
3、變數
3.1、定義變數
you_beautiful="xiaomengxin.com"
註意,變數名和等號之間不能有空格,這可能和所有編程語言都不一樣。同時,變數名的命名須遵循如下規則:
1 、命名只能使用英文字母,數字和下劃線,首個字元不能以數字開頭。
2 、中間不能有空格,可以使用下劃線(_)。
3、 不能使用標點符號。
4 、不能使用bash里的關鍵字(可用help命令查看保留關鍵字)。
3.2、使用變數
使用一個定義過的變數,只要在變數名前面加美元符號即可,如:
your_name="jiayn"
echo $your_name
echo ${your_name}
變數名外面的花括弧是可選的,加不加都行,加花括弧是為了幫助解釋器識別變數的邊界。
已定義的變數,可以被重新定義,如:
1 your_name="minglu"
2 echo $your_name
3 your_name="wang"
4 echo $your_name
3.3、只讀變數
1 #!/bin/bash
2 readonly xiao_mengxin="真可愛"
3 echo ${xiao_mengxin}
4 xiao_mengxin="太醜了"
5 echo ${xiao_mengxin}
執行結果報錯:
1 真可愛
2 真可愛
3 /tmp/772600954/main.sh: line 4: xiao_mengxin: readonly variable
3.4、刪除變數
1 unset variable_name
變數被刪除後不能再次使用。unset 命令不能刪除只讀變數。
#!/bin/bash
xiao_mengxin="真可愛"
echo ${xiao_mengxin}
unset xiao_mengxin
echo ${xiao_mengxin}
執行結果:
真可愛
3.5、變數類型
運行shell時,會同時存在三種變數:
- 局部變數 局部變數在腳本或命令中定義,僅在當前shell實例中有效,其他shell啟動的程式不能訪問局部變數。
- 環境變數 所有的程式,包括shell啟動的程式,都能訪問環境變數,有些程式需要環境變數來保證其正常運行。必要的時候shell腳本也可以定義環境變數。
- shell變數 shell變數是由shell程式設置的特殊變數。shell變數中有一部分是環境變數,有一部分是局部變數,這些變數保證了shell的正常運行
4、字元串
4.1、字元串表示
字元串可以用單引號,也可以用雙引號,也可以不用引號
str='this is a string'
單引號字元串的限制:
- 單引號里的任何字元都會原樣輸出,單引號字元串中的變數是無效的;
- 單引號字串中不能出現單獨一個的單引號(對單引號使用轉義符後也不行),但可成對出現,作為字元串拼接使用。
#!/bin/bash
xiao_mengxin='可愛'
echo ${xiao_mengxin}
str="我知道你的名字叫\"${xiao_mengxin}\"!\n"
echo -e $str
輸出:
可愛
我知道你的名字叫"可愛"!
雙引號的優點:
- 雙引號里可以有變數
- 雙引號里可以出現轉義字元
4.2、獲取字元串長度
1 #!/bin/bash
2 xiao_mengxin='可愛ne'
3 echo ${#xiao_mengxin}
輸出結果:8
4.2、提取子字元串
1 #!/bin/bash
2 xiao_mengxin='zen me zhe me ke ai ne'
3 echo ${xiao_mengxin:0:5} #是不是看起來很熟悉,有沒有想到python裡面的切片
輸出結果:zen m
4.2、查找子字元串
1 #!/bin/bash 2 xiao_mengxin='zen me zhe me ke ai ne' 3 echo `expr index "$xiao_mengxin" km`
輸出結果:5
5、數組
bash支持一維數組(不支持多維數組),並且沒有限定數組的大小。
數組元素的下標由 0 開始編號。獲取數組中的元素要利用下標,下標可以是整數或算術表達式,其值應大於或等於 0。
5.1、定義數組
在 Shell 中,用括弧來表示數組,數組元素用"空格"符號分割開。定義數組的一般形式為:
array_name=(value0 value1 value2 value3)
5.2、讀取數組
${array_name[n]}
1 #!/bin/bash
2 array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
3 echo ${array_name[1]}
輸出結果:xiao_luming
使用 @ 符號或者*符號可以獲取數組中的所有元素,例如:
${array_name[@]}
${array_name[*]}
5.3、獲取數組的長度
獲取數組長度的方法與獲取字元串長度的方法相同,例如:
#!/bin/bash
array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
echo ${#array_name[@]}
# 或者
echo ${#array_name[*]}
# 取得數組單個元素的長度
echo ${#array_name[2]}
輸出結果:
4
4
10
6、註釋
以 # 開頭的行就是註釋,會被解釋器忽略。
多行註釋可以使用以下格式:
1 #!/bin/bash
2
3 :<<!
4 array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
5 echo ${#array_name[@]}
6 # 或者
7 echo ${#array_name[*]}
8 # 取得數組單個元素的長度
9 echo ${#array_name[2]}
10 !
11
12 echo "qunaerle"
或者:
#!/bin/bash
:<<Esfdsfdsf
array_name=("xiao_mengxin" "xiao_luming" "xiao_xishi" "xiao_yingji")
echo ${#array_name[@]}
# 或者
echo ${#array_name[*]}
# 取得數組單個元素的長度
echo ${#array_name[2]}
Esfdsfdsf #一致即可
echo "qunaerle"