前面我們講過了一些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

推薦閱讀:

相關文章