1

我正在编写一个脚本,它需要一个 3 位数字并检查它们是否唯一并生成每个数字的文件,例如,如果我运行“myscript 123”,它将生成三个文件:file1、file2 和 file3 但是如果我运行“我的脚本 121”它将生成 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

这只会生成文件名,我从不同的角度解决这个问题。我们在这里谈论数字。因此,您最多可以创建十个文件。因此,我们不是孤立每个数字,而是查找每个数字,看看它是否存在于给定的数字中:

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 回答