1.命名和編寫規(guī)范
1.1 命名規(guī)范
文件名.sh
,.sh
是 linux下 bash shell 的默認(rèn)后綴
1.2 編寫規(guī)格和執(zhí)行
vi test.sh
#!/bin/bash [指定告知系統(tǒng)當(dāng)前這個(gè)腳本要使用的shell解釋器]
echo "begin"
content="xyz"
content=$(cat /root/flink/data.txt)
echo $content > /root/flink/tmp.txt
# 執(zhí)行命令1
./test.sh
# 執(zhí)行命令2
sh test.sh
# 執(zhí)行命令3
bash test.sh
2.輸入輸出重定向
命令 | 文件描述符 | 設(shè)備 | 類型 |
---|---|---|---|
/dev/stdin | 0 | 鍵盤 | 標(biāo)準(zhǔn)輸入 |
/dev/stdout | 1 | 顯示器 | 標(biāo)準(zhǔn)輸出 |
/dev/stderr | 2 | 顯示器 | 標(biāo)準(zhǔn)錯(cuò)誤輸出 |
2.1 輸入重定向
輸入重定向就是不使用標(biāo)準(zhǔn)輸入端口輸入文件莲兢,而是使用指定的文件作為標(biāo)準(zhǔn)輸入設(shè)備阎姥,簡單理解就是使用 <
符來修改標(biāo)準(zhǔn)輸入設(shè)備著恩。
命令 | 類型 | 說明 |
---|---|---|
命令 < fileA | 標(biāo)準(zhǔn)輸入 | 命令把文件A的內(nèi)容作為標(biāo)準(zhǔn)輸入設(shè)備 |
命令 << 標(biāo)識(shí)符 | 標(biāo)識(shí)符限定輸入 | 命令把標(biāo)準(zhǔn)輸入中讀入內(nèi)容煌贴,直到遇到“標(biāo)識(shí)符”分解符為止 |
# "<" 樣例1
config=/usr/config.ini
...
while read server ip;
do
...
done < $config
# read 會(huì)逐行讀取 /usr/config.ini 文件中的字段,其中每行兩個(gè)字段说榆,即分別作為 server 和 ip
# "<" 樣例2
cat < tmp.txt
# "<<" 樣例1
cat >> command.txt << EOF
function getser() {
if [ \$2 ]; then
kubectl exec -niot -it \`getser "\$1" |grep "\$2" -m 1| awk '{print \$1}' \` -- bash
else
kubectl get pods -niot -o wide | grep "\$1" |grep -v Evicted
fi
}
EOF
# "<<" 樣例2
FLINK_CONFIG=$(cat << END
security.kerberos.login.keytab: /home/hadoop-user/hadoop-user.keytab
security.kerberos.login.principal: hadoop-user
slot.request.timeout: 120000
END
)
2.2 輸出重定向
重定向輸出就是把要輸出的文件信息寫入到一個(gè)文件中去虚吟,而不是將要輸出的文件信息輸出到控制臺(tái)。在linux中签财,默認(rèn)的標(biāo)準(zhǔn)輸出設(shè)備是控制臺(tái)串慰,即用戶輸出的信息默認(rèn)情況下都會(huì)顯示到控制臺(tái)。
命令 | 類型 | 說明 |
---|---|---|
命令 > fileA | 輸出重定向 | 以覆蓋方式把命令的正確輸出內(nèi)容輸出到指定的文件或設(shè)備當(dāng)中 |
命令 >> fileA | 輸出重定向 | 以追加方式把命令的正確輸出內(nèi)容輸出到指定的文件或設(shè)備當(dāng)中 |
命令 2> fileA | 標(biāo)準(zhǔn)錯(cuò)誤輸出重定向 | 以覆蓋方式把命令的錯(cuò)誤輸出輸出到指定的文件或設(shè)備當(dāng)中 |
命令 2>> fileA | 標(biāo)準(zhǔn)錯(cuò)誤輸出重定向 | 以追加方式把命令的錯(cuò)誤輸出輸出到指定的文件或設(shè)備當(dāng)中 |
命令 > fileA 2>&1 | 正確輸出和錯(cuò)誤輸出同時(shí)保存 | 以覆蓋方式把正確輸出和錯(cuò)誤輸出都保存到同一個(gè)文件當(dāng)中 |
命令 >> fileA 2>&1 | 正確輸出和錯(cuò)誤輸出同時(shí)保存 | 以追加方式把正確輸出和錯(cuò)誤輸出都保存到同一個(gè)文件當(dāng)中 |
命令 &> fileA | 正確輸出和錯(cuò)誤輸出同時(shí)保存 | 以覆蓋方式把正確輸出和錯(cuò)誤輸出都保存到同一個(gè)文件當(dāng)中 |
命令 &>> fileA | 正確輸出和錯(cuò)誤輸出同時(shí)保存 | 以追加方式把正確輸出和錯(cuò)誤輸出都保存到同一個(gè)文件當(dāng)中 |
命令 >> fileA 2>>文件B | 正確輸出和錯(cuò)誤輸出同時(shí)保存 | 把正確的輸出追加到文件A中唱蒸,把錯(cuò)誤的輸出追加到文件B中 |
# ">" 樣例
echo " { \"master\": \"127.0.0.1\"}" > conf/node_ip.json
kill -9 $FLINK_PID > /dev/null
# ">>" 樣例
echo "FROM ${FLINK_IMAGE_NAME}" >> Dockerfile
# "2>" 樣例
rm $FLINK_DIR/log/* 2> /dev/null
kill -9 $FLINK_PID 2> /dev/null
# "2>&1" 樣例
rm -rf $FLINK_DIR/log/* > /dev/null 2>&1
kill -9 $FLINK_PID >> /dev/null 2>&1
com.huawei.xx.AppMain 2>&1 &
# 后臺(tái)執(zhí)行 main 函數(shù)并以覆蓋方式把正確輸出和錯(cuò)誤輸出
# "&>" 樣例
rm -rf $FLINK_DIR/log/* &> /dev/null
kill -9 $FLINK_PID &>> /dev/null
3.命令執(zhí)行順序
符號(hào) | 樣例 | 說明 |
---|---|---|
; | 命令A(yù) ; 命令B | 命令A(yù)和命令B順序執(zhí)行邦鲫,且兩者之間沒有任何邏輯聯(lián)系 |
&& | 命令A(yù) && 命令B | 只有在 && 左邊的命令A(yù)返回真,&& 右邊的命令B才會(huì)被執(zhí)行 |
|| | 命令A(yù) || 命令B | 只有在 || 左邊的命令A(yù)返回家假油宜,|| 右邊的命令B才會(huì)被執(zhí)行 |
# "&&" 樣例
[ -e "/root/flink/start.sh" ] && echo "file exits"
# "||" 樣例
kill ${FLINK_PID } 2> /dev/null || true
【參考】
1.Shell 教程
2.markdown表格中怎么插入邏輯或符號(hào)|