1

kubuntu 14.04 で Konsole を使用しています。

このシェルスクリプトに引数を取り、それをコマンドに渡したいです。コードは基本的に無限ループであり、内部コマンドへの引数の 1 つをループの 3 回の反復ごとに 1 回増やしたいと考えています。実際の詳細は無視して、ここに私のコードの要点を示します。

#!/bin/bash
ct=0
begin=$1
while :
    do
        echo "give: $begin as argument to the command"
        #actual command
        ct=$((ct+1))
        if [ $ct%3==0 ]; then
            begin=$(($begin+1))
        fi
    done

begin3回の反復ごとに変数が増加することを期待していますが、ループの反復ごとに増加しています。私は何を間違っていますか?

4

2 に答える 2

1

でテストしたい

if [ $(expr $cr % 3) = 0 ]; then ...

これだから

[ $ct%3==0 ]

$ct%3==0パラメータ置換後の string が空でないかどうかをテストします。これを理解するための良い方法は、マニュアルを読んでtest、1、2、3、またはそれ以上の引数が与えられたときのセマンティクスを調べることです。元のスクリプトでは引数が 1 つしかありませんが、私の場合は 3 つです。シェルでは、空白は非常に重要です。:-)

于 2015-02-03T07:33:11.380 に答える
1

BASH では、次のようにスクリプトを完全に利用((...))してリファクタリングできます。

#!/bin/bash

ct=0
begin="$1"
while :
do
   echo "give: $begin as argument to the command"
   #actual command
  (( ct++ % 3 == 0)) && (( begin++ ))
done
于 2015-02-03T07:35:11.147 に答える