我正在编写一个带有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
答案 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
}