Case 文内の if 文

Case 文内の if 文

私のロジックは、変数に浮動小数点または整数が含まれていることを確認し、変数が浮動小数点の場合は公開し、最も近い高い数値に丸め、整数の場合はそのまま印刷する必要があります。

if echo "$FS" | grep "^[0-9]*$" > /dev/null
then
echo "Integer"
elif echo "FS" | grep "^[0-9]*[.][0-9]*$" > /dev/null
then
echo "Floating"
fi

これはうまく機能しますが、ケースの説明と統合すると問題が発生します。

#!/bin/bash
IP_DIR=$1
ACTUAL=$2
typeset -l ACTUAL
RETURNSIZE=$3
typeset -l RETURNSIZE

if [ -d "$IP_DIR" ]; then
for OUTPUT in $(find $IP_DIR -maxdepth 1 | awk 'NR>1')
do
        if [ "$ACTUAL" == "true" ]; then
                case $RETURNSIZE in
                "gb") FS=`du -b $OUTPUT | awk {'print $1'}`
                      FS=$(echo "scale=12; $FS  / 1073741824" | bc)
                      echo $OUTPUT "|" $FS "GB";;
                "mb") FS=`du -b $OUTPUT | awk {'print $1'}`
                      FS=`echo $FS | awk '{ byte =$1 /1024/1024 ; print byte " MB" }'`
                      echo $OUTPUT "|" $FS;;
                "kb") FS=`du -b $OUTPUT | awk {'print $1'}`
                      FS=`echo $FS | awk '{ byte =$1 /1024 ; print byte " KB" }'`
                      echo $OUTPUT "|" $FS;;
                "b")  FS=`du -b $OUTPUT | awk {'print $1'}`
                      echo $OUTPUT "|" $FS "B";;
                "all")FS=`du -h $OUTPUT | awk {'print $1'}`
                      echo $OUTPUT "|" $FS;;
                esac
        elif [ "$ACTUAL" == "false" ]; then
               case $RETURNSIZE in
                "gb") FS=`du -b $OUTPUT | awk {'print $1'}`
                      FS=$(echo "scale=12; $FS  / 1073741824" | bc)
                      if [[ $FS == ^[0-9]*$ ]]; then echo $OUTPUT "|" $FS "GB" ;elif [[ $FS == ^[0-9]*[.][0-9]*$ ]]; then echo "$OUTPUT "|" $FS "GB round"; fi
                      ;;#echo $OUTPUT "|" $FS "GB Needed to be rounded";;
                "mb") FS=`du -m $OUTPUT | awk {'print $1'}`
                      echo $OUTPUT "|" $FS "MB";;
                "kb") FS=`du -k $OUTPUT | awk {'print $1'}`
                      echo $OUTPUT "|" $FS "KB";;
                "b")  FS=`du -b $OUTPUT | awk {'print $1'}`
                      echo $OUTPUT "|" $FS "B";;
                "all")FS=`du -h $OUTPUT | awk {'print $1'}`
                      echo $OUTPUT "|" $FS;;
                esac


        fi
done
else
echo "Directory Not Found"
fi

誤った情報

.sh: 行 48: 一致する "" の検索中に予期しない EOF が発生しました。 .sh:行50:構文エラー:予期しないファイルの終わり

ベストアンサー1

このスクリプトにはいくつかの問題があります。

欠けている部分は"31番目の縮小です。

echo "$OUTPUT "|" $FS "GB round"

awk {'print $1'}代わりに使用することもできますawk '{print $1}'

全リスト構文的質問、スクリプトを入れてください住宅検査

du -b $OUTPUT | awk {'print $1'}複数の呼び出しを1つに単純化する(メンテナンスを簡単にする)など、より良いタスクを実行できる多くのタスクがあります。

また、変数拡張の周りに2つの二重引用符がありません。

おすすめ記事