Shell編程入門
前面我們講過了一些Linux中的常用命令,但是很多時候我們不是每時每刻都想坐在電腦前敲命令,尤其是對於運維人員或者想要將工作自動化的人來說。這個時候我們就需要把一系列命令放在一起然後再交給Linux一起完成。
創建shell腳本
創建一個test.sh文件
#!/bin/bash 告訴系統需要調用什麼解釋器
echo "Hello world!"
執行shell腳本
/bin/sh test.sh 直接運行bash命令執行shell腳本文件
chmod +x ./test.sh 先將腳本文件更改成可執行程序再執行
注釋
單行注釋:每一行的行首加上#
多行注釋:
:<<EOF
...
EOF
輸入輸出重定向
> file 以覆蓋的方式將輸出重定向到file
>> file 以追加的方式將輸出重定向到file
變數
定義變數
shell可以直接定義變數,不需要想其它腳本語言如perl中那樣在變數名前面加上特殊字元
name=「yingshanli」 注意變數名和等號之間不能有空格,所賦的值要用雙引號括起來
除了直接定義變數外,還可以在語句中給變數賦值
for line in `cat reads.txt`
do
echo "$line"
done
使用變數
想上面那段代碼一樣,使用變數只需要在變數名前面加上美元符就可以了,我們建議將變數名用大括弧括起來
刪除變數
unset命令可以刪除變數
字元串
拼接字元串
FirstName="yingshan"
LastName="Li"
FullName=${FirstName}${LastName}
常用函數
name="YingshanLi"
echo ${#name} 獲取字元串長度,#表示number的意思
echo ${name:1:8} 提取子字元換
數組
創建數組
Names=(YingshanLi Bob John) 用空格獎數組裡的元素分開,同樣數組名和等號之間不能有空格
或者
Names=(
YingshanLi
Bob
John
)
訪問數組元素
echo ${Names[0]} 列印第一個名字
echo ${Names[@]} 列印所有名字
獲取數組大小
echo ${#Names[@]}
運算符
算數運算符
a=8
b=6
expr $a+$b 返回「8+6」
expr $a + $b 返回14,注意expr後面的表達式每個元素都要用空格隔開
[ $a == $b ] 返回False,注意條件表達式裡面每一個元素也要用空格分開
關係運算符
$a -eq $b 是否相等,注意橫槓不能弄丟了
$a -ne $b
$a -gt $b
$a -lt $b
$a -ge $b
$a -le $b
邏輯運算符
-a: 表示and
-o: 表示or
if [ $a -gt 6 -a $b -lt 10]
then
echo "a is greater then 6 and b is smaller than 10"
else
echo "wrong"
fi
或者
&&: 表示and
||: 表示or
if [[ $a -gt 6 && $b -lt 10 ]]
then
echo "a is greater then 6 and b is smaller than 10"
else
echo "wrong"
fi
流程式控制制
if else
if [[ $a -gt 6 && $b -lt 10 ]]
then
echo "yes"
else
echo "wrong"
fi
寫成一行
if [[ $a -gt 6 && $b -lt 10 ]]; then echo "yes"; fi
循環
1. for循環:
for line in `cat reads.txt`
do
echo "$line"
done
寫成一行
for line incat reads.txt;
do
echo "$line";
done
2. while循環:
i=1
while(( $i<=10 ))
do
echo "$line"
let "$i++"
done
無限循環
while true
do
echo "your computer is infected"
done
還有until和case循環,由於比較少用,在這裡我就不過多介紹了,感興趣的話可以找一些其它的資料看一看
3. 跳出循環:
break跳出整個大循環
continue跳出本次循環
參數傳遞
很多時候我們需要利用命令行中的參數,可以用$n來獲得。當執行命令cat a.txt b.txt x.txt
後,$0的值為cat,$1的值為a.txt,$2的值為b.txt,以此類推
函數
創建函數
printname(){
echo "My name is YingshanLi"
}
printname
函數參數
printname(){
echo "The first name is $1"
echo "The second name is $2"
echo "The third name is $3"
}
printname YingshanLi Jim John
推薦閱讀: