1.命名和编写规范
1.1 命名规范
文件名.sh
,.sh
是 linux下 bash shell 的默认后缀
1.2 编写规格和执行
vi test.sh
#!/bin/bash [指定告知系统当前这个脚本要使用的shell解释器]
echo "begin"
content="xyz"
content=$(cat /root/flink/data.txt)
echo $content > /root/flink/tmp.txt
# 执行命令1
./test.sh
# 执行命令2
sh test.sh
# 执行命令3
bash test.sh
2.输入输出重定向
命令 | 文件描述符 | 设备 | 类型 |
---|---|---|---|
/dev/stdin | 0 | 键盘 | 标准输入 |
/dev/stdout | 1 | 显示器 | 标准输出 |
/dev/stderr | 2 | 显示器 | 标准错误输出 |
2.1 输入重定向
输入重定向就是不使用标准输入端口输入文件,而是使用指定的文件作为标准输入设备,简单理解就是使用 <
符来修改标准输入设备。
命令 | 类型 | 说明 |
---|---|---|
命令 < fileA | 标准输入 | 命令把文件A的内容作为标准输入设备 |
命令 << 标识符 | 标识符限定输入 | 命令把标准输入中读入内容,直到遇到“标识符”分解符为止 |
# "<" 样例1
config=/usr/config.ini
...
while read server ip;
do
...
done < $config
# read 会逐行读取 /usr/config.ini 文件中的字段,其中每行两个字段,即分别作为 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 输出重定向
重定向输出就是把要输出的文件信息写入到一个文件中去,而不是将要输出的文件信息输出到控制台。在linux中,默认的标准输出设备是控制台,即用户输出的信息默认情况下都会显示到控制台。
命令 | 类型 | 说明 |
---|---|---|
命令 > fileA | 输出重定向 | 以覆盖方式把命令的正确输出内容输出到指定的文件或设备当中 |
命令 >> fileA | 输出重定向 | 以追加方式把命令的正确输出内容输出到指定的文件或设备当中 |
命令 2> fileA | 标准错误输出重定向 | 以覆盖方式把命令的错误输出输出到指定的文件或设备当中 |
命令 2>> fileA | 标准错误输出重定向 | 以追加方式把命令的错误输出输出到指定的文件或设备当中 |
命令 > fileA 2>&1 | 正确输出和错误输出同时保存 | 以覆盖方式把正确输出和错误输出都保存到同一个文件当中 |
命令 >> fileA 2>&1 | 正确输出和错误输出同时保存 | 以追加方式把正确输出和错误输出都保存到同一个文件当中 |
命令 &> fileA | 正确输出和错误输出同时保存 | 以覆盖方式把正确输出和错误输出都保存到同一个文件当中 |
命令 &>> fileA | 正确输出和错误输出同时保存 | 以追加方式把正确输出和错误输出都保存到同一个文件当中 |
命令 >> fileA 2>>文件B | 正确输出和错误输出同时保存 | 把正确的输出追加到文件A中,把错误的输出追加到文件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 &
# 后台执行 main 函数并以覆盖方式把正确输出和错误输出
# "&>" 样例
rm -rf $FLINK_DIR/log/* &> /dev/null
kill -9 $FLINK_PID &>> /dev/null
3.命令执行顺序
符号 | 样例 | 说明 |
---|---|---|
; | 命令A ; 命令B | 命令A和命令B顺序执行,且两者之间没有任何逻辑联系 |
&& | 命令A && 命令B | 只有在 && 左边的命令A返回真,&& 右边的命令B才会被执行 |
|| | 命令A || 命令B | 只有在 || 左边的命令A返回家假,|| 右边的命令B才会被执行 |
# "&&" 样例
[ -e "/root/flink/start.sh" ] && echo "file exits"
# "||" 样例
kill ${FLINK_PID } 2> /dev/null || true
【参考】
1.Shell 教程
2.markdown表格中怎么插入逻辑或符号|
网友评论