bash 新手 我试图编写简单的 while 循环:
let i = $1
while(i < 4); do
echo Hi
((i++))
done
运行此命令:
$ bash bash_file.sh 0
bash_file.sh line 2: 4: no such file or directory
问题:从什么时候起变量必须是文件或目录?
怎么解决这个问题?
编辑:如果我想循环,而我< $1 + $2, when $1 and $2 are numbers, how to write it>
您需要一个算术语句(两个括号),而不是子shell。
let
这里是不必要的。
i=$1
while (( i < 4 )); do
...
done
while
的参数是一个shell命令。 ( i < 4 )
启动一个运行命令 i
的子 shell,从名为 4
的文件中读取输入。重定向是在查找命令之前处理的,这解释了为什么您没有收到 i: command not found
错误。
您只需将
4
替换为您要使用的表达式即可:
while (( i < $1 + $2 )); do
i=$1
while [ "$i" -le 4 ]
do
echo $i
i=$((i+1))
done
有关 bash 条件的更多信息: https://linuxacademy.com/blog/linux/conditions-in-bash-scripting-if-statements/
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Looping-Constructs