我有一個腳本,我在其中傳遞了一個字串變數。現在我想檢查這樣傳遞的變數的值:
- 檢查它是否不為空
- 檢查是否是“Test1”
- 檢查是否是“Test2”
我是這樣寫的:#!/bin/bash
if [[ "$1" == "" || "$1" != "Test1" || "$1" != "Test2" ]]; then
echo "ERROR: no argument or bad argument passed. Only Test1 or Test2 is accepted"
exit 2
else
echo "ok good value"
exit 0
fi
但是當我嘗試腳本(./script.sh Test1 或 ./script.sh Test2)時,我總是收到:
錯誤:沒有引數或錯誤的引數傳遞。只接受 Test1 或 Test2
uj5u.com熱心網友回復:
感謝您的支持,但這是錯誤的,因為接受所有不為空的值。
我用這個解決了:
if [[ "$1" != "Test1" ]] && [[ "$1" != "Test2" ]]; then
uj5u.com熱心網友回復:
而不是if [[ ...,嘗試case哪個更便攜:
case "$1" in
Test[12]) echo "ok good value"
exit ;;
*) echo "ERROR: no argument or bad argument passed. Only Test1 or Test2 is accepted";
exit 2 ;;
esac
注意:如果一個程式有很多用戶,“No X or else no Y”形式的模糊錯誤訊息有時會浪費人年的集體時間,因為一半的用戶將測驗錯誤的問題。所以如果代碼有很多用戶,單獨的錯誤資訊會更好:
case "$1" in
Test[12]) echo "ok good value"
exit ;;
"") echo "ERROR: no argument passed. Only Test1 or Test2 is accepted";
exit 2 ;;
*) echo "ERROR: Bad argument, only Test1 or Test2 is accepted";
exit 2 ;;
esac
uj5u.com熱心網友回復:
嘗試更換
if [[ "$1" == "" || "$1" != "Test1" || "$1" != "Test2" ]]; then
和
if [ -z "$1" ] || [ "$1" == "Test1" ] || [ "$1" == "Test2" ]]; then
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/341775.html
上一篇:我想使用用戶的輸入,然后使用case陳述句呼叫一個函式
下一篇:回圈遍歷bashscript中的檔案名-需要在每個回圈第n次迭代中更新檔案中的一行文本,使用n 1但回圈序列會導致問題
