簡體   English   中英

Linux Shell腳本中的參數

[英]Parameters in Linux shell script

我正在嘗試在Linux中創建一個充當基本計算器的腳本文件。 它需要傳遞3個參數或不傳遞任何參數。

如果它具有3個參數,則應該能夠像這樣執行。

./mycalc 1 + 2
the sum of 1 plus 2 equals 3

但是,如果它沒有任何參數,則應顯示一個菜單,要求減,加或退出。

這種布局看起來如何? 我一直在嘗試,但是每當我運行它時,都會出現錯誤,提示我需要輸入參數,然后在出現錯誤后顯示菜單。

op="$2"

if [ $op == "+" ]
then
   sum=$(expr $1 + $3)
   echo "The sum of $1 plus $3 equals $sum"
elif [ $op == "-" ]
then
   diff=$(expr $1 - $3)
   echo "The sum  of $1 minus $3 equals $diff"
else    

while [ $ch != "X" ] || [ $ch != "x" ] 
do
read -p "C) Calculation
 X) Exit" ch

命令行參數引用為$1, $2, $3... (第一個arg為$ 1,第二個為$ 2 ...)

您可以使用以下命令測試參數是否不為null:

if [ -z "$1" ]
  then
    echo "No argument supplied"
fi

這是一個“可愛”的答案。 稍后,我將為您提供有關代碼的反饋。

#!/bin/bash
case $2 in 
  +|-) :;; 
  *) echo "unknown operator: $2"; exit 1;;
esac
declare -A ops=( 
  ["-"]=minus 
  ["+"]=plus 
)
printf "%d %s %d equals %d\n" "$1" "${ops["$2"]}" "$3" "$(bc <<< "$*")"

這是一個重寫,希望展示一些有用的技術和良好實踐

#!/bin/bash

user_args () {
    case $2 in
        +) echo "The sum of $1 plus $3 equals $(( $1 + $3 ))" ;;
        -) echo "The sum of $1 minus $3 equals $(( $1 - $3 ))" ;;
        *) echo "I don't know what to do with operator '$2'" ;;
    esac
}

interactive () {
    PS3="Select an operator: "
    select choice in plus minus exit; do
        case $choice in
            plus)  operator="+"; break ;;
            minus) operator="-"; break ;;
            exit)  exit;;
        esac
    done
    read -p "First value: " first
    read -p "Second value: " second
    echo "The sum of $first $choice $second equals $(( $first $operator $second ))"
}

if (( $# == 3 )); then
    user_args "$@"
else
    interactive
fi
  • 使用功能實現模塊化
  • 易於擴展分支的案例說明
  • select語句以生成菜單並強制執行有效輸入
  • bash的內置算術表達式
  • "$@"傳遞參數
  • 引用變量到處都需要引用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM