試圖使這項作業我有一個腳本,它需要得到一個由空格分隔的多值引數
e.g ./script.sh -f something1 something2
while [[ $1 -gt 0 ]]; do
case $1 in
-u | --username ) shift
USER=$1 ;;
-p | --password ) shift
PASSWORD=$1 ;;
-o | --out ) shift
OUT=$1 ;;
-f | --file ) shift
PACKAGE=$1 ;;
-g | --group ) shift
GROUP=$1 ;;
-n | --name ) shift
NAME=$1 ;;
-help | --help ) help
;;
download ) ACTION="download"
;;
delete ) ACTION="delete"
;;
* ) usage exit 1
esac
shift
done
uj5u.com熱心網友回復:
正確的語法如下:
while [[ -n "$1" ]]; do
case "$1" in
-u | --username) USER="$2" ;;
-p | --password) PASSWORD="$2" ;;
-o | --out) OUT="$2" ;;
-f | --file) PACKAGE="$2" ;;
-g | --group) GROUP="$2" ;;
-n | --name) NAME="$2" ;;
-t | --test) TEST1="$2"; TEST2="$3"; shift 2 ;;
-help | --help) help; exit 0 ;;
download) ACTION="download" ;;
delete) ACTION="delete" ;;
* ) usage; exit 1 ;;
esac
shift
done
要將由空格分隔的多個引數作為單個引數傳遞,請確保用單引號/雙引號將它們參考。
./script.sh -f 'something1 something2'
要么
./script.sh -f "something1 something2"
uj5u.com熱心網友回復:
對于這種情況,已經有一個內置的 shell - getopts(不是getopt)
https://www.mkssoftware.com/docs/man1/getopts.1.asp
uj5u.com熱心網友回復:
你可以嘗試這樣的事情:
#!/bin/bash
while getopts ":n:u:" opt
do
case $opt in
n) name="$OPTARG" ;;
u) user="$OPTARG" ;;
\?) echo "Invalid option -$OPTARG" >&2
exit 1 ;;
esac
done
echo "Name: $name"
echo "User: $user"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/428414.html
上一篇:pythonpip3無法在LinuxDebian上安裝zoneinfo
下一篇:SSH連接重置/拒絕
