2017-12-29 61 views
-1

ユーザーがリスト内の値を選択するまでループするスクリプトを作成しようとしています(0から9までの1桁の数字)。リスト内のループまで選択

choice=999 
echo $choice 
until [[ $choice in 0 1 2 3 4 5 6 7 8 9 ]] 
do 
    read -p "How many would you like to add? " choice 
done 

どんなに私は何をすべきか、私はちょうどそれが仕事を得ることはできません。これは私がshコマンドを使用してのUbuntu 16.04シェルで実行しようとする私の.SHスクリプトです。ここではあなたの手で、エラーのアイデアを与えるための試験は、です:

sh test2.sh 
999 
test2.sh: 3: test2.sh: [[: not found 
How many would you like to add? f 
test2.sh: 3: test2.sh: [[: not found 
How many would you like to add? 2 
test2.sh: 3: test2.sh: [[: not found 
How many would you like to add? 3 
test2.sh: 3: test2.sh: [[: not found 
How many would you like to add? r 
test2.sh: 3: test2.sh: [[: not found 

私はたくさんのことを試してみた:

  • untilを回避し、ちょうど単数角括弧を使用してwhile
  • を使用して[ condition ] 、かっこはまったくありません
  • 正規表現に一致するように=~を使用してください^[0-9]

何も機能しません。常に同じエラー。どうしたの? :(

答えて

1

、あなたの[[: not foundはあなたがバッシュを使用していないことを示唆しているスクリプトの先頭に#!/bin/bashを追加、またはでそれを実行しますどちらか。、または[標準を使用してください。

いずれにしても、inのように使用することはできません。一つの選択肢は、caseステートメントを使用することです:

while :; do 
    read -p "How many would you like to add? " choice 
    case $choice in 
    [0-9]) 
     break 
     ;; 
    esac 
done 

いいことについてcase声明は、彼らはあなたがglobパターンを使用できるようにするということですので、9から0から[0-9]マッチ、任意の数。

あなたが最後にバッシュを使用して計画している場合、あなたはまた、このような何かのために行くことができます:

#!/bin/bash 

until [[ $choice =~ ^[0-9]$ ]]; do 
    read -p "How many would you like to add? " choice 
done 

ここでは、正規表現を0から9に以来の数字を一致させるために使用されます。

+0

ありがとう、私は2番目の方法を試み、それは魅力のように働いた。 – Alexander

+0

歓迎いたします。私はあなたの質問を編集して、元々やっていたことをはっきりさせるようにしました。あなたが同意しない場合は、自由に編集し直してください。 –

0

[[: not foundは、bashの組み込みではなく、SHである。 はあなたが彼女-強打をチェックし、それがsh#!/binb/bash、ない#!/bin/sh?そして第二に、bash scriptname.shとして実行するスクリプトは、ないことを確認することができます。

そして、最後に、そのようなあなたのスクリプトを書き換えしよう:

まず
choice=999 
echo $choice 
while [[ "$(seq 0 9)" =~ "${choice}" ]] 
do 
    read -p "How many would you like to add? " choice 
    # ((choice++)) If choice=999, script will not read anything. 
    # If 0 <= choice <= 9, script will not never stopped. 
    # So, you should uncomment ((choice++)) to stop script running when choice become 
    # more than 9. 
done 
+1

これは唯一の問題ではありませんが、スクリプトが 'sh'で実行されているようです(最上部の行を参照)。 –

+0

@TomFenechはそれを見逃していましたが、shもbashへのシンボリックリンクです。だから、最初に 'bash scriptname.sh'でスクリプトを実行して、she-bangをチェックしてみてください。それ以降、構文を修正します:) –

+0

bash test2.sh test2.sh:行3:条件付きバイナリ演算子が必要です test2.sh:行3: 'in 'の構文エラー test2.sh:line 3: '[$ 1 2 3 4 5 6 7 8 9]] ' – Alexander

関連する問題