forked from study-area-cn/learn-linux-basic
更新 src/shell_and_shell_script/loops.md
This commit is contained in:
parent
ab84527338
commit
d7761efacf
|
@ -26,10 +26,10 @@ array=("value1" "value2" "value3")
|
||||||
数组中的元素都拥有一个唯一的索引,索引从 0 开始。我们可以使用下面的方法来访问数组中的元素:
|
数组中的元素都拥有一个唯一的索引,索引从 0 开始。我们可以使用下面的方法来访问数组中的元素:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
array[0]
|
${array[0]}
|
||||||
```
|
```
|
||||||
|
|
||||||
这将会返回 array 数组中的第一个元素,即"value1"。
|
这将会返回 array 数组中的第一个元素,即 `value1`。
|
||||||
|
|
||||||
## `for-in` 循环
|
## `for-in` 循环
|
||||||
|
|
||||||
|
@ -42,7 +42,31 @@ do
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
|
|
||||||
在这个示例中,variable 是循环变量,array 是要循环的数组。在每次循环中,variable 都会被赋值为 array 中的一个元素,然后执行你的代码。当 array 中的所有元素都被循环完毕后,循环结束。
|
在这个示例中,variable 是循环变量,array 是要循环的数组。在每次循环中,variable 都会按顺序被赋值为 array 中的一个元素,然后执行你的代码。当 array 中的所有元素都被循环完毕后,循环结束。
|
||||||
|
|
||||||
|
这里 array 除了可以放数组之外,也可以放字符串(按行遍历)和范围语句。
|
||||||
|
|
||||||
|
范围语句的格式如下:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
{起点..终点}
|
||||||
|
{起点..终点..步长}
|
||||||
|
```
|
||||||
|
|
||||||
|
> 在 bash 中,起点可以大于终点,但是步长要为正数。并且起点和终点都会被遍历
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
for num in {1..10}
|
||||||
|
do
|
||||||
|
echo $num
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
会输出从 1 到 10。
|
||||||
|
|
||||||
|
> 在范围语句内不能加变量,如果需要使用变量请往下看。
|
||||||
|
|
||||||
## `for` 循环
|
## `for` 循环
|
||||||
|
|
||||||
|
@ -57,6 +81,21 @@ done
|
||||||
|
|
||||||
在这个例子中,初始化语句会被执行,然后执行一次判断语句。如果判断语句的结果为真,那么就会进行一次循环。当你的代码运行完毕后,会执行一次迭代语句,然后再回去执行判断。
|
在这个例子中,初始化语句会被执行,然后执行一次判断语句。如果判断语句的结果为真,那么就会进行一次循环。当你的代码运行完毕后,会执行一次迭代语句,然后再回去执行判断。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
for ((i=1; i<=10; i++))
|
||||||
|
do
|
||||||
|
echo $i
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
就对应了 `{1..10..1}` 的结果。
|
||||||
|
|
||||||
|
> 这里表达式和方括号有区别,不能使用 `-lt` 一类的符号。可以使用:`==`、`>=`、`<=`、`!=`。
|
||||||
|
>
|
||||||
|
> 而后面的 `i++` 中,可以使用 `--`,也可以使用 `+=`、`-=`、`*=`、`/=` 后面加一个数字。
|
||||||
|
|
||||||
## `while` 循环
|
## `while` 循环
|
||||||
|
|
||||||
`while` 循环允许我们在某个条件为真时,重复执行一段代码。以下是一个简单的示例:
|
`while` 循环允许我们在某个条件为真时,重复执行一段代码。以下是一个简单的示例:
|
||||||
|
@ -70,6 +109,21 @@ done
|
||||||
|
|
||||||
while 循环就相当于一个 for 循环,但是没有了初始化和迭代语句。如果你在条件的位置写上了 `true`,那么它会永无休止的执行下去,除非你手动停止。
|
while 循环就相当于一个 for 循环,但是没有了初始化和迭代语句。如果你在条件的位置写上了 `true`,那么它会永无休止的执行下去,除非你手动停止。
|
||||||
|
|
||||||
|
> while 中的条件需要使用方括号。
|
||||||
|
|
||||||
|
例如:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
i=1
|
||||||
|
while [ $i -le 10 ]
|
||||||
|
do
|
||||||
|
echo $i
|
||||||
|
i=$[ $i + 1 ]
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
和上面 for 的版本是一样的。
|
||||||
|
|
||||||
## `until` 循环
|
## `until` 循环
|
||||||
|
|
||||||
`until` 循环刚好与 while 循环相反,它允许我们在某个条件为假时,重复执行一段代码。以下是一个简单的 until 循环示例:
|
`until` 循环刚好与 while 循环相反,它允许我们在某个条件为假时,重复执行一段代码。以下是一个简单的 until 循环示例:
|
||||||
|
@ -87,6 +141,6 @@ until 循环常常被用于多次尝试的场景下,例如尝试连接到一
|
||||||
|
|
||||||
## 课后作业
|
## 课后作业
|
||||||
|
|
||||||
- 使用 for 循环制作一个程序,程序读取一个正整数 N,并输出 2^N 的值(提示:只需要让变量从 1 开始,每次乘 2 即可)。
|
- 使用 for 循环制作一个程序,这个程序读取一个正整数 N,并输出 2^N 的值(提示:只需要让变量从 1 开始,每次乘 2 即可)。
|
||||||
- 使用 while 循环制作一个猜数字游戏,程序随机生成一个 1 到 100 之间的整数,玩家需要猜出这个数字是多少,程序会根据玩家的猜测给出猜大了或者猜小了的提示,直到玩家猜对为止。
|
- 使用 while 循环制作一个猜数字游戏,程序会随机生成一个 1 到 100 之间的整数,玩家需要猜出这个数字是多少,程序会根据玩家的猜测给出猜大了或者猜小了的提示,直到玩家猜对为止(提示:生成随机数可以使用 `$[ $RANDOM % 99 + 1 ]`,其中 `$RANDOM` 是一个 0~32767 的随机整数)。
|
||||||
- 使用 for-in 循环制作一个程序,该程序读取一个列表,并输出它的所有元素。
|
- 使用 for-in 循环制作一个程序,该程序读取一个列表,并挨个输出它的所有元素。
|
||||||
|
|
Loading…
Reference in New Issue