linux shell 数字上限,关于linux:Shell脚本-检查参数上的数字是否唯一

我正在编写一个脚本,该脚本需要一个三位数的数字,并检查它们是否唯一,并生成每个数字的文件,例如,如果运行" 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看起来更自然。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值