【Shell】基础知识

2023-03-21  本文已影响0人  熊本极客

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表格中怎么插入逻辑或符号|

上一篇下一篇

猜你喜欢

热点阅读