私は一連の大文字アルファベット文字の入力を受け入れるreadコマンドを使ってbashスクリプトをコーディングしています。入力は0で終わります。すべての有効な入力文字と有効な入力文字の合計数の間でアルファベット順に最初の文字を検索して表示します。アルファベットの最初の文字を入力から探し出し、入力した文字を数える方法
Iは、例えば、D、G、T、W、Q、3、B 1、D、S、0の入力は、期待される出力があった場合に:
「が3が無効入力され」
『1は無効な入力』 は 『すべての入力のアルファベットの最初の文字がB』
『であるあなたは8つの有効な文字を入力しています。』
はここにいくつか私のコードであると聞かせください私は何を修正する必要があるか知っている
#!/bin/bash
IV=()
loop=-1
c=Z
ac=0
while [ $loop -gt 0] || [ $loop -t 0]
do
echo "Enter an uppercase Alphabet"
read b
if [[ $b = [A-Z] ]]
then
ac=`expr $ac +1`
if [ $b \< $c ]
then
c=$b
fi
elif [ $b = "0" ]
then
loop=`expr $loop +1`
for i in "${IV[@]}"
do
echo $i "is an invalid input"
done
echo "The first letter in Alphabetical order of all input is" $c
echo "You have entered" $ac "valid letters."
else
IV[@]=$b
fi
done
だから、私の問題は私の入力無効な文字列またはint型の場合、出力は のようなものです「IV [@]:悪い配列の添字」ということで、コードが何をやって近くにいるように見えます
投稿されたコードで直面している問題は何ですか?何があなたのために働かないのですか?あなたはレビューをお探しですか?その後、おそらくhttps://codereview.stackexchange.com/でよりよく適合します 始めに、shebangを '#!/ bin/bash -x'に変更し、出力を見てください... –
ああ、残念です。私の問題は、無効な文字列またはintを入力すると、出力が "IV [@]:不良配列の添え字"のようになります。 –
これは、IV [@] = $ b'を実行できないためです。 '@ '指定子はあなたがすべての要素をリストすることを可能にしますが、割り当てのために' lvalue'として使用することはできません。なぜ 'ac =' expr $ ac + 1'ですか?シンプルな((aC++))がすべて必要です。 'expr'は動作しますが、* s l o w l y ... *。 '[$ b \ <$ c]'とは何ですか?[** ShellCheck.net **](http://www.shellcheck.net/)でコードを実行しましたか? –