抄书也不行,奇怪了
shell脚本里面我还没用过for循环呢
#!/bin/bash
s=0
for((i=0; i<5; i++))
do
s=$((s+i))
echo " $i: $s"
done
echo "result is: $s"
0: 0
1: 1
2: 3
3: 6
4: 10
result is: 10
${变量}
不是 {$}变量
抄书也不行,奇怪了
有错误的书太多了,大学谭浩强那本教材都一堆错误,何况普通的书呢
要编写一个Shell脚本来生成自然数的和,可以使用循环来实现。以下是一个简单的Shell脚本示例,它计算从1到指定数字(比如100)的所有自然数的和:
#!/bin/bash
# 提示用户输入一个数字
echo "请输入一个正整数:"
read n
# 初始化变量 sum 用来存储和
sum=0
# 使用循环计算自然数的和
for (( i=1; i<=$n; i++ ))
do
sum=$((sum + i))
done
# 输出结果
echo "从1到$n 的自然数的和为: $sum"
让我们来解释一下这个脚本:
#!/bin/bash
表示这是一个bash脚本。echo "请输入一个正整数:" read n
用来提示用户输入一个正整数,并将输入的值存储在变量n
中。sum=0
初始化变量sum
,用来存储自然数的和。for (( i=1; i<=$n; i++ ))
是一个循环,从1开始逐步增加,直到达到用户输入的数字n
。sum=$((sum + i))
在每次迭代中,将当前的数值i
加到sum
上。- 最后,输出结果
echo "从1到$n 的自然数的和为: $sum"
,显示从1到用户输入的数字n
的所有自然数的和。
你可以在命令行中运行这个脚本,并按照提示输入一个数字,然后它将计算并输出从1到该数字的所有自然数的和。
我执行的结果为啥是这样,虽然没有报错
另外,ai和ai差的远了,建议换个强一点的
哪个ai会告诉你shell里可以这么写for循环?
我执行的结果为啥是这样,虽然没有报错
楼主自己贴出来的脚本是错误的,有问题。
其他人贴的脚本都可以正常执行
https://gitee.com/zinface/bash-completion.ywloader/blob/master/old-bash-completion/ywloader
这是我的一个工具的 bash 补全脚本(原始版本),里面有大量注释,适合学习。
可以搜索 for 找到一些用法,另外,bash 补全脚本非常考验在有限的信息下完成各种不同的任务以赋予命令行程序灵魂。
$ ywloader use <与第二个参数相隔一个空格后为tab键补全点>
# ^主命令 ^子命令
提供到补全脚本的信息只有:
1. words: [ywloader use] 两个数据(所有词)
2. prev: [use] 一个数据(上一个词)
3. cword: [] 空数据(如果补全点为第三个参数的部分:如 ywloader use cm<补全点>,那么 cword 是 [cm])
4. cur: 2 数值(当前词位置,从0开始)
根据以上有限信息来完成二级命令的补全,补全脚本的使命就是为 ywloader 命令提供全部可用数据(并预判可能需要的词)
后来,因为这个命令要补全的条目项太多,用旧的 bash 补全脚本性能不够用,为了重构,目前永远的保留了这个包含注释的版本。
新的版本更加巧妙,本质上仍是通过 ywloader list 来列出所有项进行重组输出,但相比旧的版本,新的版本直接使用了 ywloader list 提供的细节 --xxx 参数,直接输出一个列表充当补全数据,而不需要在补全脚本中进行字符串遍历、分割、重组为数组到变量中(性能从 1s 变成了 0.1s,说明 bash 的数据处理性能太垃圾了,补全操作我 tab 是无限按的)
哪个ai会告诉你shell里可以这么写for循环?
讯飞星火
另外,ai和ai差的远了,建议换个强一点的
请问一下这个是什么ai
讯飞星火
我曾经接触过一个职位 就是给ai生成的代码查错的
所以
蹲在提款机里数钱的人是真的存在
两个错误:
- 把参数的扩展语法
${s}
错写成{$}s
- 在 dash Shell 中使用了不支持的算术 for 语法
更正:
如果是 dash Shell,则不能使用算术 for 语法,因为 dash 不支持该语法。可以换成 for 迭代循环结构:
#!/bin/dash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH
read -p "please input a number , I will count 1+2...+your input: " nu
s=0
for i in `seq 1 $nu` ; do
s=$((s+i))
done
echo "result in $s "
如果要使用算术 for 语法,则需要把脚本开头的 #!/bin/dash
改成 #!/bin/bash
:
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
export PATH
read -p "please input a number , I will count 1+2...+your input: " nu
s=0
for((i=1;i<=nu;++i)){
s=$((s+i))
}
echo "result in $s "
此外,在 Shell 中进行算术运算时,如果遇到变量,应尽可能地避免使用参数扩展语法。也就是说,应该尽量直接使用变量名,而不是在变量名前面加 $
符号,除非是特殊参数或位置参数。实际上,当变量没有设置或值为空时,在算术表达式中 $i
和 i
并非等价,例如
上面的例子中,我们先执行了 unset i
取消设置变量 i 。接着执行 echo $(($i * 5))
时,出现了语法错误,这是因为,$i
执行的是参数扩展,bash 会把 i
当成参数表达式(而不是一个算术表达式),并扩展为空字符串,从而导致因 * 5
前面没有操作数而出现语法错误。当执行 echo $((i * 5))
时,就没有这个问题,这是因为,在算术表达式中,未设置或值为空的变量会被视为 0 值。
Popular Events
More
现在shell脚本是不是改了,一直报错,ai帮忙写的也是报错爱
cal_test: 6: Syntax error: Bad for loop variable
这个是ai写的