Linux

需要對 shell 腳本進行特殊驗證

  • July 19, 2016

我想創建一個 bash 腳本,它在執行時會有很多選項。

# script.sh  --dry-run --user <parameter1> --pass <parameter2>

我聽說過 getopt 選項,但看起來我們只能寫其中一個,--user or --password或者--dry-run不能全部寫。基本上我想--user parameter1作為 input1 和--pass parameter2input2 以及一個特殊情況,如果--dry-run有選項,那麼只執行幹執行程式碼而不是生產。

#!/bin/bash
user=$1
pass=$2

help() {
   cat<<EOF
Usage : $0 --dry-run --user <user_id> --pass <password>
you can specify --dry-run or --production
EOF
}

[ ${3} ] || help

function dry_run() {
   // --dry-run code 
}

function production() {
  // --production code 
}

我想驗證--dry-run,如果選項是--dry-run,則執行函式,dry_run()否則執行production()函式。但是如何編寫選項和驗證?

如果我明白你在追求什麼,你可以這樣做getopt

#!/bin/bash

PARAMS=$(getopt -l dry-run,production,user:,pass: -n $0 "" -- "$@")
if [ $? != 0 ]; then exit 1; fi
eval set -- "$PARAMS"

dryrun=false

while [ -n "$1" ]; do
   case "$1" in
       --dry-run) dryrun=true; shift;;
       --production) dryrun=false; shift;;
       --user) user="$2"; shift 2;;
       --pass) pass="$2"; shift 2;;
       --) shift;;
       *) exit 1;;
   esac
done

if [ $dryrun = true ]; then
   ...
else
   ...
fi

如果要禁止同時指定--dry-runand --production,或者如果需要--userand ,則可以添加更多處理--password

引用自:https://unix.stackexchange.com/questions/190162