このような if ステートメントを使用して、要素の値を変数と比較するにはどうすればよいですか。たとえば、数値の配列を調べて、最小値をチェックしています。構文に問題があります。
for ((j=0;j<$i;j++)); do
if [ "$array[$j]" -gt $min ]; then
min=${array[$j]}
fi
done
echo The minimum number is $min
このような if ステートメントを使用して、要素の値を変数と比較するにはどうすればよいですか。たとえば、数値の配列を調べて、最小値をチェックしています。構文に問題があります。
for ((j=0;j<$i;j++)); do
if [ "$array[$j]" -gt $min ]; then
min=${array[$j]}
fi
done
echo The minimum number is $min
あなたのif
声明にはthen
句がありません:
if [ "$array[$j]" -gt $min ]; then
min=${array[$j]}
fi
また、UNIX ツールの真の精神で、より洗練されたものを検討してください。
min_elem=$(echo ${array[@]} | tr ' ' '\n' | sort -n | head -1)
いくつかのコメント:
-gt
分を取得するための望ましい演算子ではありません簡単な修正例を次に示します (他のコマンドを使用せずに Bash のみ):
#!/bin/bash
array=("1" "0" "2")
length="${#array[@]}"
min="${array[0]}"
for (( i=1 ; i < "$length"; i++)); do
[[ ${array[$i]} -le $min ]] && min="${array[$i]}"
done
echo "The minimum number is $min"
EDIT : gniourf_gniourf のコメントの後に実行されたテスト (コメントを参照)
[ ~]$ cat test.sh
#!/bin/bash
array=("1" "0" "2")
m=${array[0]}; for i in "${array[@]:1}"; do ((i<m)) && m=$i; done
echo "The minimum number is $m"
[ ~]$ ./test.sh
The minimum number is 0
[ ~]$ vi test.sh
[ ~]$ cat test.sh
#!/bin/bash
array=("1" "0" "2")
m="${array[0]}"; for i in "${array[@]:1}"; do [[ $i -le $m ]] && m="$i"; done
echo "The minimum number is $m"
[ ~]$ ./test.sh
The minimum number is 0
[ ~]$