1

シェル スクリプト プログラミングは初めてです。出力が奇数の引数のみを返すプログラムを作成しようとしています。たとえば、「I am a robot」は「I a」のみを指定する必要があります。

シフト コマンドを使用して、while ステートメントと if ステートメントと一緒に引数を処理できると思っていましたが、if ステートメントの角かっこ ([]) で、2 による除算と 1 の余りを伝える方法がわかりません。

#!/bin/sh
X=$1
shift
while [ $# -gt 0 ]; do
  if [ "HELP HERE" ]; then
     X=$1
     echo $X
  fi
  shift
 done
echo $X
4

3 に答える 3

3

2回シフトするのはどうですか?

while [ $# -gt 0 ]; do
    X=$1
    echo $X
    shift
    shift
done
于 2012-10-05T07:00:47.340 に答える
0

nneonneo さんの考えは以下よりも優れているはずですが、念のため引数がおかしいかどうかをチェックする方法を提示しておきます。

#!/bin/sh
cnt=1
while [ $# -gt 0 ]; do
  X=$1

  # output the current argument when the counter is odd.
  if [ $(($cnt%2)) -eq 1 ]; then
    echo $X
  fi

  cnt=$(($cnt+1))
  shift
done
于 2012-10-05T15:41:04.753 に答える
0
#!/bin/bash

declare -a ODD
declare -a EVEN
ODDIX=0
EVENIX=0

while [ $# -ne 0 ]; do
    if (( $#%2 == 1 ));then
        ODD[$ODDIX]=$1
        ODDIX=$((ODDIX+1))
    else        
        EVEN[$EVENIX]=$1
        EVENIX=$((EVENIX+1))
    fi
    shift
done

echo ODD: ${ODD[@]}
echo EVEN: ${EVEN[@]}*
于 2012-10-05T22:41:02.960 に答える