Bash Shell脚本-将数字与for语句配对
我正在尝试制作一个脚本,添加数对,仅使用简单的for/if语句,例如:Bash Shell脚本-将数字与for语句配对,bash,shell,numbers,Bash,Shell,Numbers,我正在尝试制作一个脚本,添加数对,仅使用简单的for/if语句,例如: ./pair 1 2 4 8 16 会导致 ./pair 1 2 4 8 16 32 3 12 48 我当前的脚本是(可能大错特错,我对Shell脚本还不熟悉): 然而,这是行不通的。任何帮助都会很好。我的方法使用cshell。作为一名C程序员,我与cshell的连接更好。但是,我用迭代器来处理这个问题,递增两次 @ i = 1 while ( $i < $#argv ) @ j = $i + 1 @ su
./pair 1 2 4 8 16
会导致
./pair 1 2 4 8 16 32
3
12
48
我当前的脚本是(可能大错特错,我对Shell脚本还不熟悉):
然而,这是行不通的。任何帮助都会很好。我的方法使用cshell。作为一名C程序员,我与cshell的连接更好。但是,我用迭代器来处理这个问题,递增两次
@ i = 1
while ( $i < $#argv )
@ j = $i + 1
@ sum = $argv[$i] + $argv[$j]
echo $sum
@ i = $i + 2
end
@i=1
而($i<$#argv)
@j=$i+1
@总和=$argv[$i]+$argv[$j]
回音$sum
@i=$i+2
终止
我的方法使用cshell。作为一名C程序员,我与cshell的连接更好。但是,我用迭代器来处理这个问题,递增两次
@ i = 1
while ( $i < $#argv )
@ j = $i + 1
@ sum = $argv[$i] + $argv[$j]
echo $sum
@ i = $i + 2
end
@i=1
而($i<$#argv)
@j=$i+1
@总和=$argv[$i]+$argv[$j]
回音$sum
@i=$i+2
终止
for循环的并不是实现这一点的正确工具。使用while
循环和shift
命令
while[$#-gt 1];做
echo$($1+2))
班次2
完成
脚本中的问题是if
语句中没有足够的空格,并且变量名前面没有$
:
if [ $count = 2 ]
此外,您只希望在将其值重置为0之前输出$sum
,而不是每次通过循环
而且,expr
不再需要用于算术:sum=$((sum+a))
afor
循环并不是用于此的正确工具。使用while
循环和shift
命令
while[$#-gt 1];做
echo$($1+2))
班次2
完成
脚本中的问题是if
语句中没有足够的空格,并且变量名前面没有$
:
if [ $count = 2 ]
此外,您只希望在将其值重置为0之前输出$sum
,而不是每次通过循环
而且,expr
不再需要用于算术:sum=$((sum+a))
因此shebangs位于bourne shell中,如果您直接启动脚本,它将与执行以下操作相同:
/bin/sh <your_script_name>
它对输入标记进行计数,只要有2个以上(方括号测试),它就会添加第一个标记和第二个标记,以显示结果<代码>移位2
意味着将输入移到两个位置(即,删除$1和$2,并将$n映射到$n-2)。因此,shebangs位于bourne shell中,如果您直接启动脚本,则与执行以下操作相同:
/bin/sh <your_script_name>
它对输入标记进行计数,只要有2个以上(方括号测试),它就会添加第一个标记和第二个标记,以显示结果<代码>移位2意味着将输入移到两个位置(即,删除$1和$2,并将$n映射到$n-2)
我的方法使用cshell。作为一名C程序员,我与cshell的连接更好。但是,我用迭代器来处理这个问题,迭代器递增两次。
我很久没有看到有人用Csh写文章了。早在Unix早期,就有两个主要shell:Csh和Bourne shell。Bourne是AT&T的风格,BSD(Berkeley标准发行版)使用Csh,它从C语言中获取语法提示 我认识的大多数人都使用Csh作为他们的标准shell,但是使用Bourne shell编写脚本,因为Csh有各种各样的问题,正如Olivier Dulac所指出的(正如Olivier Dulac已经提到的)。但是,Csh有命令别名、命令行历史记录和编辑。人们希望在命令行shell中使用的功能 Csh在苏诺斯时代达到顶峰。SunOS基于BSD,Sun管理员几乎所有的脚本都是用Csh编写的。然而,大卫·科恩和科恩希尔改变了很多。Kornshell包含标准的Bournshell语法语言,但包含人们希望在Csh中使用的命令别名和shell历史编辑等功能。不仅如此,它还包含了许多以前从未在shell中发现的新功能,如内置数学(再见
expr
和bc
),与[…]
的模式匹配,以及可以使用set-o
设置的shell选项
现在,根本不需要了解Csh。您可以使用Kornshell作为脚本语言和命令行shell。当Sun用Solaris取代SunOS时,默认的shell是Kornshell而不是C shell。这就是C shell作为一种可行的shell选择的终结
Csh的最后一位大倡导者是史蒂夫·乔布斯。NeXT使用TurboCsh作为其默认外壳,它是MacOSX第一次迭代的默认外壳——很久以前Sun就放弃了它。但是,MacOSX的更高版本默认为BASH
BASH现在是默认的和标准的。正如我前面提到的,在大多数系统上,/bin/sh
是BASH。BASH手册页中有以下内容:
如果使用名称sh调用bash,它将尝试尽可能接近sh的历史版本的启动行为,同时也符合POSIX标准
这意味着坚实的bashism(shopt
,${foo/re/repl}
等)并不活跃,但从Kornshell继承的大部分东西([…]
,set-o
,typeset
,$(…)
)仍然可用。这意味着,即使作为/bin/sh
调用,大约99%的BASH脚本仍然可以工作
我相信汤姆·克里斯蒂安森(Tom Christiansen)的反Csh论文中的大多数批评都不再适用。Turbo C外壳-它在很久以前就取代了原来的C外壳,修复了许多错误。然而,Turbo C是在世界上很多地方放弃了C shell之后出现的,所以我真的不能说
Csh方法很有趣,但不是这个问题的正确答案。C Shell脚本是一种与Bourne Shell完全不同的语言。你会过得更好
#!/bin/sh
printf "%s %s+pc" "$@" | dc
#!/bin/sh
printf "%s %s+pc" "${@/-/_}" | dc