1

私は3桁の数字を取り、それらが一意であるかどうかをチェックし、各桁でファイルを生成するスクリプトを書いています。たとえば、「myscript 123」を実行すると、file1、file2、file3の3つのファイルが生成されますが、実行すると「myscript121」はfile1とfile2を生成します

議論を見て各桁を比較するのに助けが必要です、誰かが私に手を貸してくれませんか?

これは私がこれまでに書いたものです:

if [ $1 -gt 99 ] && [ $1 -lt 1000 ]
then
   echo "Your three digit number: $1"
else
   echo "please restart and enter a 3-digit number"
   exit
fi
4

3 に答える 3

2

私の最大の課題は、$ 1をチェックして、各桁が何であるかを確認することですが、私は無知です

文字列から各文字を取得するには、いくつかの方法があります。たとえば、次の機能を使用して、それらを配列に分割できますfold

$ IN="123"
$ DIGITS=($(echo $IN | fold -w1))
$ echo ${DIGITS[0]}
1
$ echo ${DIGITS[1]}
2

または、変数の部分文字列抽出を使用できます(ドキュメントを参照)。

$ IN="123"
$ echo ${IN:0:1}
1
$ echo ${IN:1:1}
2

または、を使用letして基本的なモジュロ演算を実行できます。

$ IN="123"
$ let A="IN % 10"  # get last digit (3rd)
$ ((IN /= 10))     # divide by 10 (which discards last digit)
$ let B="IN % 10"  # get last digit (2nd)
$ ((IN /= 10))     # divide by 10 (which discards last digit)
$ let C="IN % 10"  # get last digit (1st)
$ echo $A
3
$ echo $B
2
$ echo $C
1
于 2012-08-03T18:34:43.997 に答える
0

モジュロ演算子と除算演算子を使用して桁を抽出し、それらを比較することができます。または、「echo」、「head」、「tail」を組み合わせて数字を抽出することもできます。例:

digit2=$(echo $1|head -c 2|tail -c 1)
于 2012-08-03T18:37:20.797 に答える
0

これはファイル名を生成するだけで、私はこれに別の角度から取り組んでいます。ここでは数字について話しています。したがって、最大で10個以下のファイルを作成します。したがって、各桁を分離する代わりに、各桁を探して、指定された数に存在するかどうかを確認します。

function files_for_digits {
    [[ $1 != [0-9][0-9][0-9] ]]  && 
        echo "specify a three digit number" >&2 && return 1

    typeset i
    for i in {0..9}; do
        [[ $1 == *$i* ]] && echo file$i
    done
}
于 2012-08-03T19:46:56.050 に答える