我們在平時的編程學習中,或多或少,或早或晚,都要接觸到linux服務器;
熟練掌握shell編程技術,是從小白變大牛的必經之路!
通過本文知識,讓我們花5分鐘時間徹底搞懂shell編程,相信聰明的你,看完一定會有收獲!
【正文開始】
什么是shell?
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Shell 編程跟 JAVAScript 編程一樣,只要有一個能編寫代碼的文本編輯器和一個能解釋執行的腳本解釋器就可以了。
Shell 種類有很多,最常用的的是:Bourne Again Shell(即:/bin/bash,基本等同 /bin/sh),它非常易用且完全免費,是大多數Linux 系統默認的 Shell
大家常見的shell腳本的第一行內容是: #!/bin/bash
這一句就是告訴系統需要使用 /bin/bash 腳本解釋器來執行。
編寫第一個shell腳本實例: vim test.sh
然后輸入:
#!/bin/bash
echo "Hello World !"
# 運行 Shell 腳本的兩種方法:
1、作為可執行程序
chmod +x ./test.sh #使腳本具有執行權限
./test.sh #直接執行腳本(./不可省略,表示在當前目錄查找,否則默認去環境變量PATH里找)
2、作為解釋器參數
例1: /bin/sh test.sh
例2: /bin/php test.php
這種方式運行的腳本,不需要在第一行指定解釋器信息(寫了也沒用)
# shell的注釋
單行注釋: #
多行注釋:
<
注釋內容...
注釋內容...
注釋內容...
EOF
# 變量操作
定義:
str=abcd
注意: 變量名str和等號之間不能有空格(否則報錯:變量名未找到命令),不能有特殊符號(?*),不能以數字開頭(可以使用下劃線和大寫)
使用:${變量名} (大括號雖然是可選的,但是推薦用)(有利于區分邊界,防止意外情況)
只讀: readonly 變量名 (沒有大括號)
刪除: unset 變量名 (刪除后不能再用,不能刪除只讀變量)
# 字符串操作
str="abcd"
取長:echo ${#str} # 輸出 4
截取: echo ${str:1:5} # 輸出 bcd(不會報越界)
拼接:echo ${str}'abc' # 輸出 abcabc
查找:echo `expr index "$str" cd` # 輸出3(注意必須是反引號)
判空:if test $str # 等價于 if [ $str ]
判等:if test $str = "abcd" # 等價于 if [ $str = "abcd" ]
# 數組操作
共3種定義方式:
1)array_name=(value0 value1 value2 value3)
2)array_name=(
value0
value1
value2
value3
)
3)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
讀取數組: valuen=${array_name[n]}
獲取數組所有元素:echo ${array_name[@]}
獲取數組長度: length=${#array_name[@]}
# 自定義函數的實現
定義:
func1(){
echo "第一個參數為 $1 !"
echo "第二個參數為 $2 !"
}
調用: func1 p1 p2
# 條件的處理
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
# 循環的處理
1)for的寫法
for var in item1 item2 ... itemN
do
...
done
一個例子:
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
2)while 的寫法
int=1
while(( $int<=5 ))
do
echo $int
let "int++"
done
## 文件測試運算符
操作符 說明 舉例
-e 檢測文件(包括目錄)是否存在
-d 檢測文件是否是目錄
-r 檢測文件是否可讀
-w 檢測文件是否可寫
-x 檢測文件是否可執行
-s 檢測文件是否為空(文件大小是否大于0),不為空返回 true
-b 檢測文件是否是塊設備文件,
-c 檢測文件是否是字符設備文件
-p 檢測文件是否是管道文件
-l 檢測文件是否存在并且是一個符號鏈接。
-f 檢測文件是否是普通文件(既不是目錄,也不是設備文件)
-g 檢測文件是否設置了 SGID 位
-u 檢測文件是否設置了 SUID 位
-k 檢測文件是否設置了粘著位(Sticky Bit)
-S: 檢測某文件是否是 socket。
一個示例:
file="test.sh"
if test -r $file
then
echo "文件可讀"
else
echo "文件不可讀"
fi
【全文完】