常見使用技巧
- 從命令行輸出中提取信息并賦值給變量宾肺,通過以下兩種形式:反引號字符`或者$()格式杏死。
testing=`date` testing=$(date)
- 輸出重定向通過
>
符號完成該項功能,>>
可以追加到文件
command > outputfile
- 輸入重定向和輸出重定向正好相反沮榜。輸入重定向?qū)⑽募膬?nèi)容重定向到命令莫其,而非將命令的輸出重定向到文件。
command < inputfile
- 管道
|
可以將一個命令的輸出作為另一個命令的輸入,類似:
command1 | command2
rpm -qa | sort > rpm.list
- 文件比較
-d file # 檢查file是否存在并是一個目錄
-e file # 檢查file文件是否存在
-f file # 檢查file是否存在并是一個文件
-r file # 檢查file是否存在并可讀
-s file # 檢查file是否存在并非空
-w file # 檢查file是否存在并可寫
-x file # 檢查file是否存在并執(zhí)行
#!/bin/bash
jump_directory=/home/arthur
if [ -d $jump_directory ]; then
echo "The $jump_directory directory exists"
else
echo "The $jump_directory directory does not exist"
fi
- 用于雙括號的數(shù)學(xué)表達式的比較
if (( $val ** 2 > 90 )); then
- 用戶雙方括號的字符串比較
if [[ $user == r* ]]; then # r* 是一個匹配模式 看是否是以字母r開頭
- for 循環(huán),此次的循環(huán) 手動設(shè)定了 IFS 環(huán)境變量,因為默認的字段分隔符包含空格眷茁、制表符、換行符纵诞,就不能按照我們設(shè)想的按行輸出上祈,所以在此設(shè)定了IFS使其只能識別換行符
#!/bin/bash
file="shell.md"
IFS.OLD=$IFS
IFS=$'\n'
for state in $(cat $file)
do
echo "$state"
done
IFS=$IFS.OLD #重置
- while 循環(huán)
#!/bin/bash
var1=10
while [ $var1 -gt 0 ]
do
echo $var1
var1=$[ $var1 - 1 ]
done
- 重定向錯誤和數(shù)據(jù),可以使用特殊重定向符號
&>
標(biāo)準(zhǔn)文件描述符如下:
0 STDIN 標(biāo)準(zhǔn)輸入
1 STDOUT 標(biāo)準(zhǔn)輸出
2 STDERR 標(biāo)準(zhǔn)錯誤
- 阻止命令輸出
>/dev/null 2>&1 # 首先表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件浙芙,也就是不輸出任何信息到終端登刺,說白了就是不顯示任何信息。接著嗡呼,標(biāo)準(zhǔn)錯誤輸出重定向(等同于)標(biāo)準(zhǔn)輸出纸俭,因為之前標(biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯誤輸出也重定向到空設(shè)備文件南窗。
- 以后臺模式運行腳本
有時候一個腳本要執(zhí)行很長一段時間揍很,而你不想在命令行界面干等著,那么在命令后幾個&符就可以了万伤。
command &
但這種方式會在登出控制臺后退出相關(guān)進程窒悔,但有些時候需要在終端會話中啟動shell腳本,讓腳本一直以后臺模式運行到結(jié)束壕翩,即使退出終端會話蛉迹。這我們可以用到 nohup
命令來實現(xiàn), nohup
會將 STDOUT
和 STDERR
的消息重定向到一個名為 nohup.out
的文件中
nohup ./test.sh &