シェルスクリプトのforループで変数とファイルを使用することに関するいくつかの質問[閉じる]

シェルスクリプトのforループで変数とファイルを使用することに関するいくつかの質問[閉じる]

解決すべき問題があります。私はAWSターミナルで権限を変更するだけでなく、職場でLinuxをほとんど使用しないため、知識はあまりありません。私も長い間検索をしてみたが、効果があると思っていたすべてが効果がないことを発見した。私はUbuntuを使用しており、単純なシェルスクリプトを作成し、bashを使用して実行しました。

  1. 読み取りからユーザー整数入力を取得し、forループで各数値を個別に使用する方法はありますか?たとえば、コマンドを読み取り、スペースで区切られた3 4 45 5と入力すると、各コマンドを個別に繰り返して合計に追加できますか?

  2. 同じループでファイルを使用するのはどうですか? 3 4 45 5 1行に同じ値を含むfile.txtがある場合、値を繰り返して一緒に追加するのと同じ機能を実行できますか?

  3. forループで変数を使用する正しい形式は何ですか?次の内容は正しいですか?いろいろな方法で見ました。

#this is what I was trying
read var
sum = 0  #even the sum doesn't seem to work I dont see a different way to declare a number though
for i in  '${var[0]}'
do
 $((sum += i))  #confused here also have seen ('$sum' += '$i')
done 

echo '$sum'

今回もファイルを持ちたいのですが、変数の代わりにファイルを使用しています。

files = "/Documents/numbers.txt"
for i in $files

とてもシンプルで申し訳ありません。しかし、数年前の学校では、私は基本以外のほとんどの仕事に全く新しい人でした。

ベストアンサー1

read var
sum = 0 

sum=0スペースなしでなければなりません。以下を参照してください。シェルスクリプトの変数代入のスペース

for i in  '${var[0]}'

"${var[0]}"リテラル文字列を取得する代わりに変数を拡張するには、二重引用符を使用してください。以下を参照してください。「...」、'...'、$'...'、および $"..." 引用符の違いは何ですか?

インデックスはスカラー変数が1つしかないため、やや混乱していますが(他のインデックス${var[0]}と同じ$varですがnull値を提供します)for i in "$var"

$((sum += i))

これは機能しますが、シェルがそれをコマンドとして実行しようとする結果まで拡張されます。同様のエラーが発生しますbash: 3: command not found((sum += i))(ドル記号なし)またはを使用して以下sum=$((sum + i))を確認してください。https://mywiki.wooledge.org/BashGuide/CompoundCommands#Arithmetic_Evaluation

echo '$sum'

varと同じですecho "$sum"

コマンドを読み取り、スペースで区切られた3 4 45 5と入力すると、各コマンドを個別に繰り返して合計に追加できますか?

あなたはできます

read var
for x in $var; do ...

今回は引用符はありません。

これは、結果として引用されていない変数を分割するシェルに依存します。通常、これは避けるべきです。エラーの原因になります。。ファイル名のグロービングも発生します。たとえば、ユーザーがそれを入力すると、*現在のディレクトリのすべてのファイルに展開されます。望むより:スペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?そしてhttps://mywiki.wooledge.org/WordSplitting

files = "/Documents/numbers.txt"

まず、スペースを再度削除します。次に、変数にファイル名を割り当てます。シェルは実際にファイルを読み取る意図を推測できません。これを行うには、コマンドを実行して出力を保存するように明示的に指示する必要があります(単に画面に印刷する代わりに)。このように: files=$(cat "/Documents/numbers.txt")


$((sum + i))数字を含まないと arithmetic( ) が奇妙なことをしてランダムなコマンドを実行するようにだますかもしれないので、実際の生活ではiしなければならない入力に数字のみが含まれていることを確認してください。以下を参照してください。シェル算術評価における整理されていないデータ使用のセキュリティ影響

おすすめ記事