Shell Scripting - 检查参数上的数字是否唯一

时间:2012-08-03 18:10:52

标签: linux shell testing scripting arguments

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

3 个答案:

答案 0 :(得分:2)

  

我最大的挑战是检查$ 1并查看每个数字是什么,我无能为力

有几种方法可以检索从字符串中删除的每个字符串。例如,您可以借助fold

将它们拆分为数组
$ IN="123"
$ DIGITS=($(echo $IN | fold -w1))
$ echo ${DIGITS[0]}
1
$ echo ${DIGITS[1]}
2

或者您可以使用变量子串提取(参见docs):

$ 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

答案 1 :(得分:0)

您可以使用模运算和除法运算符来提取数字,然后只需比较它们。或者您可以使用“echo”,“head”和“tail”的组合来提取数字。例如:

digit2=$(echo $1|head -c 2|tail -c 1)

答案 2 :(得分: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
}