Bash

提示並從使用者那裡讀取兩個整數的 Bash shell 腳本程序。

  • April 23, 2016

好的,所以我一直試圖解決這個問題一段時間,但我左右都出現了錯誤。這是我第一次嘗試學習基礎知識。所以任何建議都會有所幫助!

問題:我正在嘗試編寫一個 Bash shell 腳本程序,它提示並從使用者那裡讀取兩個整數。假定第二個參數大於第一個參數。程序的輸出是從第一個數字開始到第二個數字結束的數字計數。

換句話說,輸出將如下所示:

   Please enter the first number:
   3
   Please enter the second number, larger than the first:
   6

   3
   4
   5
   6

好了,這就是我目前所擁有的~

   read -p "Please Enter the first number : " n1
    echo "$n1"
  read -p "Please Enter the second number, larger than the first : " n2
    echo "$n2"
  FIRSTV=0
  SECONDV=1
  if [ 1 -gt 0]
  then
  count=$((FIRSTV-SECONDV))
  echo $COUNT
  fi

如果你可以使用seq,你可以這樣做:

read -p "Please Enter the first number : " n1
echo "$n1"
read -p "Please Enter the second number, larger than the first : " n2
echo "$n2"

seq "$n1" "$n2"

如果您必須完全在 shell 中執行此操作並且可以使用現代 shell,如,bash等(但不是或或類似嚴格的 POSIX shell),您可以將命令替換為:ksh``zsh``ash``dash``seq

eval "printf '%s\n' {$n1..$n2}"

您需要使用eval第二個版本,因為 bash/ksh/etc 序列需要像 的實際整數{1..5},而不是像{$n1..$n2}. eval擴展變數,以便在{...}序列中使用它們的實際值。

如果你想用一個循環來做,沒有花哨的 bash/ksh/etc 功能,你可以用類似的東西替換seqor行:eval

c="$n1"

while [ "$c" -le "$n2" ] ; do
   echo "$c"
   c=$((c+1))
done

這適用於任何與 POSIX 兼容的 shell,包括dashand ash,以及bash等。

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