我正在编写一个脚本,该脚本需要一个三位数的数字,并检查它们是否唯一,并生成每个数字的文件,例如,如果运行" 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
为什么不简单地两次创建文件? 没有伤害...
这是我正在处理的作业的一部分,它必须检查每个数字并仅创建一次文件。
我最大的挑战是检查1美元,看看每个数字是多少,我一无所知
有关更多信息,请访问stackoverflow.com/questions/7578930/
My biggest challenge though is to check $1 and see what each digit is, I am clueless
有几种方法可以从字符串中检索每个字符。 例如,您可以在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
谢谢@Shawn为了使我高兴,我的3位数字分配给$ 1:echo $ {$ 1:0:1}以显示第一位数字echo $ {$ 1:1:1}以显示第二位echo $ {$ 1:1 :2}以显示第三位数字?
将$IN替换为$1,它应该可以正常工作
太好了谢谢 :)
抱歉,第3位数字为echo $ {$ 1:1:2}吗?
太神奇了,第三个可以让我在我有限的知识范围内做到这一点,非常感谢:)
对于变量子字符串提取,第一个字段是var名称,第二个字段是位置,第三个字段是要提取的长度-因此,您需要${1:2:1}作为第三个字符。 (我已经编辑了帖子,以链接到一些可能会有用的文档。
@PhillToronto不客气。祝您工作顺利。
您真的需要${$1:2:1}吗? ${1:2:1}似乎对我有用
@ another.anon.coward您说得对。它应该是${1:2:1}
Yup ${$1:2:1}引发错误。不错的答案(和往常一样:)
这只会生成文件名,而我从另一个角度解决了这个问题。
我们在这里谈论数字。 因此,您最多可以创建十个文件。
因此,我们不查找每个数字,而是查找每个数字,然后查看给定数字中是否存在该数字:
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
}
您可以使用取模和除法运算符来提取数字,然后对其进行比较。 或者,您可以结合使用" echo"," head"和" tail"来提取数字,例如:
digit2=$(echo $1|head -c 2|tail -c 1)
如果必须使用外部进程,则cut看起来更自然。