<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Shell 腳本的參數(shù)解析工具

          共 6775字,需瀏覽 14分鐘

           ·

          2021-04-06 17:54

          公眾號關注“杰哥的IT之旅”,

          選擇“星標”,重磅干貨,第一時間送達!


          Argbash是一個代碼生成器,它為你的腳本生成一個量身定制的解析庫。與其他bash模塊的通用代碼不同,它生成你的腳本所需的最少代碼。此外,如果你不需要100%符合那些CLI標準的話,你可以生成更簡單的代碼。

          Shell腳本的參數(shù)解析工具

          1. 使用空格分隔

          使用空格作為參數(shù)分隔

          實際用法

          ./myscript.sh -e conf -s /etc -l /usr/lib /etc/hosts

          實現(xiàn)腳本

          #!/bin/bash

          POSITIONAL=()
          while [[ $# -gt 0 ]]; do
            key="$1"

            case $key in
              -e|--extension)
                EXTENSION="$2"
                shift # past argument
                shift # past value
                ;;
              -s|--searchpath)
                SEARCHPATH="$2"
                shift # past argument
                shift # past value
                ;;
              -l|--lib)
                LIBPATH="$2"
                shift # past argument
                shift # past value
                ;;
              --default)
                DEFAULT=YES
                shift # past argument
                ;;
                *)
              POSITIONAL+=("$1"# save it in an array for later
                shift # past argument
                ;;
            esac
          done

          set -- "${POSITIONAL[@]}" # restore positional parameters

          echo FILE EXTENSION  = "${EXTENSION}"
          echo SEARCH PATH     = "${SEARCHPATH}"
          echo LIBRARY PATH    = "${LIBPATH}"
          echo DEFAULT         = "${DEFAULT}"
          echo "Number files in SEARCH PATH with EXTENSION:" $(ls -1 "${SEARCHPATH}"/*."${EXTENSION}" | wc -l)
          if [[ -n $1 ]]; then
            echo "Last line of file specified as non-opt/last argument:"
            tail -1 "$1"
          fi

          2. 使用等號分隔

          使用等號作為參數(shù)分隔

          實際用法

          ./myscript.sh -e=conf -s=/etc -l=/usr/lib /etc/hosts

          實現(xiàn)腳本

          #!/bin/bash

          for key in "$@"do
            case $key in
              -e=*|--extension=*)
                EXTENSION="${key#*=}"
                shift # past argument=value
                ;;
              -s=*|--searchpath=*)
                SEARCHPATH="${key#*=}"
                shift # past argument=value
                ;;
              -l=*|--lib=*)
                LIBPATH="${key#*=}"
                shift # past argument=value
                ;;
              --default)
                DEFAULT=YES
                shift # past argument with no value
                ;;
              *)
                ;;
            esac
          done

          echo "FILE EXTENSION  = ${EXTENSION}"
          echo "SEARCH PATH     = ${SEARCHPATH}"
          echo "LIBRARY PATH    = ${LIBPATH}"
          echo "Number files in SEARCH PATH with EXTENSION:" $(ls -1 "${SEARCHPATH}"/*."${EXTENSION}" | wc -l)
          if [[ -n $1 ]]; then
            echo "Last line of file specified as non-opt/last argument:"
            tail -1 $1
          fi |

          3. 使用 getopts 工具

          使用第三方工具進行參數(shù)解析

          實際用法

          ./myscript.sh -h

          ./myscript.sh -v -f

          實現(xiàn)腳本

          #!/bin/sh

          # 重置以防止在前面的shell中使用getopts工具(這是一個POSIX變量)
          OPTIND=1

          # 初始化變量名稱
          OUTPUT_FILE=""
          VERSION=0

          # getopts的缺點就是它只能處理短選項,如-h,而不能是--help格式
          while getopts "h?vf:" key; do
              case "$key" in
              h|\?)
                  show_help
                  exit 0
                  ;;
              v)
                  VERSION=1
                  ;;
              f)
                  output_file=$OPTARG
                  ;;
              esac
          done

          shift $((OPTIND-1))

          "${1:-}" = "--" ] && shift

          echo "verbose=$VERSION, output_file='$output_file', Leftovers: $@" |

          4. 使用 argbash 工具

          動態(tài)的參數(shù)解析工具

          這個工具主要提供腳本參數(shù)的解析功能,而且不再引用任何第三方庫的情況下。就我使用而言,一般會比普通腳本多30多行而且,但是效果非常好。

          詳細信息可以通過官方網(wǎng)站地址了解。

          https://argbash.io/generate#results

          #!/bin/bash
          # This is a rather minimal example Argbash potential
          # Example taken from http://argbash.readthedocs.io/en/stable/example.html


          # [可選參數(shù)]
          # ARG_OPTIONAL_SINGLE([option], [o], [optional argument help msg])

          # [可選布爾參數(shù)]
          # ARG_OPTIONAL_BOOLEAN([print], , [boolean optional argument help msg])

          # [固定參數(shù)]
          # ARG_POSITIONAL_SINGLE([positional-arg], [positional argument help  msg], )

          # [幫助信息]
          # ARG_HELP([The general script's help msg])
          # ARGBASH_GO


          # [ <-- needed because of Argbash

          echo "Value of --option: $_arg_option"
          echo "print is $_arg_print"
          echo "Value of positional-arg: $_arg_positional_arg"

          # ] <-- needed because of Argbash |

          文章作者: Escape
          文章鏈接: https://escapelife.github.io/posts/9b814911.html

          推薦閱讀

          一文讀懂 Shell 中各種括號的作用

          神奇,原來 Shell 腳本還能這么玩!

          Linux Shell 自動交互/人機交互的 3 種方法

          必會的 24 道 Shell 腳本面試題

          編寫可靠 Shell 腳本需注意的幾點建議呢?

          使用 Shell 在多服務器上批量操作

          Shell 腳本的 10 個有用的“面試問題和解答”

          Shell 腳本中 '$' 符號的多種用法

          黑客神技:利用 Shell 腳本掩蓋 Linux 服務器上的操作痕跡

          編寫 Shell 腳本的最佳實踐

          這些 Shell 分析服務器日志命令集錦,收藏好了~

          Shell腳本編寫及常見面試題

          Shell 命令執(zhí)行可視化和告警工具

          史上最全的 Linux Shell 文本處理工具集錦

          23 個非常實用的 Shell 拿來就用腳本實例

          Shell 腳本攻略之小試牛刀

          瀏覽 71
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色成人视频 | 中国一级黄色免费电影 | 国产精品日产欧美 | 无码免费在线观看高清 | 国产视频九九九 |