shell編程語法

運行shell命令,需要在前面加echo

shell中變量:
$HOME :當前用戶主目錄
$PWD :當前運行命令的目錄
$USER: 當前用戶
set: 顯示當前shell所有變量
export+ 變量名 :可把變量提升爲全局環境變量

定義變量:
STR=“hello world”
A=9
A=ls -la反引號,運行裏面的命令,並把結果返回給變量A, 也可以寫成A=$(ls -la)

shell中特殊變量:
$? 表示上一個命令退出的狀態
$$ 表示當前進程編號
$0 表示當前腳本名稱
$n 表示n位置的輸入參數(n代表數字,n>=1)
$# 表示參數的個數,常用於循環
*和@ 都表示參數列表

運算符:
格式 :expr m + n 或$((m+n)) 注意expr運算符間要有空格
計算(2 +3 )×4 的值
echo expr \expr 2 + 3` * 4` 或 $(((2+3)*4))

for循環:
for N in 1 2 3
do
echo $N
done

或者

for ((i = 0; i <= 5; i++))
do
echo “welcome $i times”
done

while循環:
i=1
while ((i<=3))
do
echo $i
let i++
done

case語句:
case $1 in
start)
echo “starting”
;;
stop)
echo “stoping”
;;
*)
echo "Usage: {start|stop} “
esac

if判斷:
if condition
then
statements
[elif condition
then statements. …]
[else
statements ]
fi

[ condition ] (注意condition前後要有空格)

[ condition ] && echo OK || echo notok 條件滿足,執行後面的語句

常用判斷條件:

= 字符串比較
-lt 小於
-le 小於等於
-eq 等於
-gt 大於
-ge 大於等於
-ne 不等於

自定義函數:
function funname ()
{
action;
[return int;]
}

命令行文本處理:

1、cut命令可以從一個文本文件或者文本流中提取文本列

選項與參數:
-d :後面接分隔字符。與 -f 一起使用;
-f :依據 -d 的分隔字符將一段信息分割成爲數段,用 -f 取出第幾段的意思;
-c :以字符 (characters) 的單位取出固定字符區間;

例如:
將 PATH 變量取出,我要找出第五個路徑。
#echo $PATH | cut -d ‘:’ -f 5
/usr/local/bin

2、sort 命令對 File 參數指定的文件中的行排序,並將結果寫到標準輸出。

選項與參數:
-f :忽略大小寫的差異,例如 A 與 a 視爲編碼相同;
-b :忽略最前面的空格符部分;
-M :以月份的名字來排序,例如 JAN, DEC 等等的排序方法;
-n :使用『純數字』進行排序(默認是以文字型態來排序的);
-r :反向排序;
-u :就是 uniq ,相同的數據中,僅出現一行代表;
-t :分隔符,默認是用 [tab] 鍵來分隔;
-k :以那個區間 (field) 來進行排序的意思

例如:

/etc/passwd 內容是以 : 來分隔的,我想以第三欄來排序,該如何?
[root@www ~]# cat /etc/passwd | sort -t ‘:’ -k 3
root❌0:0:root:/root:/bin/bash
uucp❌10:14:uucp:/var/spool/uucp:/sbin/nologin
operator❌11:0:operator:/root:/sbin/nologin
bin❌1:1:bin:/bin:/sbin/nologin
games❌12💯games:/usr/games:/sbin/nologin

3、wc 統計文件裏面有多少單詞,多少行,多少字符。

例如:
#wc -m /etc/passwd #統計文件的字符數
1719

4、awk命令
awk是一個強大的文本分析工具,相對於grep的查找,sed的編輯,awk在其對數據分析並生成報告時,顯得尤爲強大。

例如:
如果只是顯示/etc/passwd的賬戶
#cat /etc/passwd |awk -F ‘:’ ‘{print $1}’
root
daemon
bin
sys

5、sed命令
sed 是一種在線編輯器,它一次處理一行內容。
替換:s命令

例如:
$ sed ‘s/test/mytest/g’ example
-----在整行範圍內把test替換爲mytest。如果沒有g標記,則只有每行第一個匹配的test被替換成mytest。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章