美文网首页
【Shell】基础知识

【Shell】基础知识

作者: 熊本极客 | 来源:发表于2023-03-21 22:54 被阅读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表格中怎么插入逻辑或符号|

    相关文章

      网友评论

          本文标题:【Shell】基础知识

          本文链接:https://www.haomeiwen.com/subject/esorrdtx.html