Skip to content

Commit 946d80a

Browse files
committed
循环实例添加
1 parent f8a5642 commit 946d80a

File tree

1 file changed

+90
-15
lines changed

1 file changed

+90
-15
lines changed

README.md

Lines changed: 90 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,15 @@ Shell Tutorial
4040
- [文件测试操作符](#文件测试操作符)
4141
- [比较操作符](#比较操作符)
4242
- [操作字符串](#操作字符串)
43-
- [循环和分支](#循环和分支)
44-
- [Loops](#Loops)
43+
- [for/while](#forwhiles)
44+
- [for](#for)
45+
- [while](#while)
46+
- [until](#until)
4547
- [嵌套循环](#嵌套循环)
4648
- [循环控制](#循环控制)
4749
- [case/select](#caseselect)
50+
- [case](#case)
51+
- [select](#select)
4852

4953

5054

@@ -65,11 +69,13 @@ echo $NUM
6569
chmod +x ./demo1 # 使每个人都有执行的权限
6670
chmod +rx ./demo1 # 使每个人都有读和执行的权限
6771
chmod u+rx ./demo1 # 仅仅使脚本文件拥有者有读和执行的权限
72+
chmod u+x ./demo1 # 只有自己可以执行,其它人不能执行
73+
chmod ug+x ./demo1 # 只有自己以及同一群可以执行,其它人不能执行
6874
chmod 555 ./demo1 # 使每个人都有读和执行的权限
69-
chmod 777 ./demo1
75+
chmod 777 ./demo1
7076
```
7177

72-
当前目录下运行 demo1 脚本
78+
当前目录下运行 [demo1](./example/demo1) 脚本
7379

7480
```bash
7581
./demo1
@@ -467,7 +473,10 @@ echo $myUrl
467473
| $LINENO | 这个变量表示在本shell脚本中该变量出现时所在的行数。它只在脚本中它出现时有意义,它一般可用于调试。|
468474
| $MACHTYPE | 机器类型,识别系统的硬件类型。|
469475
| $OLDPWD | 上一次工作的目录("OLD-print-working-directory",你上一次进入工作的目录)|
470-
| $OSTYPE | 操作系统类型|
476+
| $TZ | 时区 |
477+
| $MAILCHECK | 每隔多少秒检查是否有新的信件 |
478+
| $OSTYPE | 操作系统类型 |
479+
| $MANPATH man | 指令的搜寻路径 |
471480
| $PATH | 可执行程序文件的搜索路径。一般有/usr/bin/, /usr/X11R6/bin/, /usr/local/bin,等等。|
472481
| $PIPESTATUS | 此数组变量保存了最后执行的前台管道的退出状态。相当有趣的是,它不一定和最后执行的命令的退出状态一样。|
473482
| $PPID | 一个进程的$PPID变量保存它的父进程的进程ID(pid)。用这个变量和pidof命令比较。|
@@ -717,8 +726,6 @@ echo $? # 因为上一条命令执行成功,打印0。
717726
lskdf # 无效命令。
718727
echo $? # 因为上面的无效命令执行失败,打印一个非零的值。
719728

720-
echo
721-
722729
exit 113 # 返回113状态码给shell。
723730
# 可以运行脚本结束后立即执行命令"echo $?" 检验。
724731

@@ -964,10 +971,9 @@ echo | awk '{
964971
exit 0
965972
```
966973

974+
## for/while
967975

968-
## 循环和分支
969-
970-
### Loops
976+
### for
971977

972978
重复一些命令的代码块,如果条件不满足就退出循环,下面是一个基本的循环结构。[demo27](./example/demo27)
973979

@@ -987,6 +993,79 @@ do
987993
done
988994
```
989995

996+
### while
997+
998+
一个while循环可以有多个判断条件,但是只有最后一个才能决定是否退出循环。然而这需要一种有点不同的循环语法。
999+
1000+
> while [condition]
1001+
> do
1002+
> command...
1003+
> done
1004+
1005+
```shell
1006+
# --------------------------
1007+
# 简单的while循环
1008+
# --------------------------
1009+
var0=0
1010+
LIMIT=10
1011+
1012+
while [ "$var0" -lt "$LIMIT" ]
1013+
do
1014+
echo -n "$var0 " # -n 将会阻止产生新行。
1015+
# ^ 空格,数字之间的分隔。
1016+
var0=`expr $var0 + 1` # var0=$(($var0+1)) 也可以。
1017+
# var0=$((var0 + 1)) 也可以。
1018+
# let "var0 += 1" 也可以。
1019+
done # 使用其他的方法也行。
1020+
# --------------------------
1021+
# 多条件的while循环
1022+
# --------------------------
1023+
var1=unset
1024+
previous=$var1
1025+
1026+
while echo "previous-variable = $previous"
1027+
echo
1028+
previous=$var1
1029+
[ "$var1" != end ] # 记录之前的$var1.
1030+
# 这个"while"循环中有4个条件, 但是只有最后一个能控制循环.
1031+
# 退出状态由第4个条件决定.
1032+
do
1033+
echo "Input variable #1 (end to exit) "
1034+
read var1
1035+
echo "variable #1 = $var1"
1036+
done
1037+
exit 0
1038+
```
1039+
1040+
### until
1041+
1042+
这个结构在循环的顶部判断条件,并且如果条件一直为false那就一直循环下去。(与while相反)。
1043+
1044+
> until [condition-is-true]
1045+
> do
1046+
> command...
1047+
> done
1048+
1049+
**注意⚠️**
1050+
1051+
1. until循环的判断在循环的顶部,这与某些编程语言是不同的。
1052+
2. 与for循环一样,如果想把do和条件放在一行里,就使用";"。
1053+
1054+
> until [condition-is-true] ; do
1055+
1056+
```shell
1057+
END_CONDITION=end
1058+
until [ "$var1" = "$END_CONDITION" ]
1059+
# 在循环的顶部判断条件.
1060+
do
1061+
echo "Input variable #1 "
1062+
echo "($END_CONDITION to exit)"
1063+
read var1
1064+
echo "variable #1 = $var1"
1065+
done
1066+
exit 0
1067+
```
1068+
9901069
### 嵌套循环
9911070

9921071
嵌套循环就是在一个循环中还有一个循环,内部循环在外部循环体中。[demo28](./example/demo28)
@@ -1018,7 +1097,6 @@ done
10181097
exit 0
10191098
```
10201099

1021-
10221100
### 循环控制
10231101

10241102
影响循环行为的命令 `break``continue`, break命令将会跳出循环,continue命令将会跳过本次循环下边的语句,直接进入下次循环。[demo29](./example/demo29)
@@ -1041,16 +1119,14 @@ do
10411119
done
10421120
```
10431121

1044-
10451122
## case/select
10461123

10471124
case/select依靠在代码块的顶部或底部的条件判断来决定程序的分支。
10481125

1049-
### case(in)/esac
1126+
### case
10501127

10511128
case它允许通过判断来选择代码块中多条路径中的一条。它的作用和多个if/then/else语句相同,是它们的简化结构,特别适用于创建目录。[demo30](./example/demo30)
10521129

1053-
10541130
> case "$variable" in
10551131
> ?"$condition1" )
10561132
> ?command...
@@ -1060,7 +1136,6 @@ case它允许通过判断来选择代码块中多条路径中的一条。它的
10601136
> ?;;
10611137
> esac
10621138
1063-
10641139
- 对变量使用`""`并不是强制的,因为不会发生单词分离。
10651140
- 每句测试行,都以右小括号`)`结尾。
10661141
- 每个条件块都以两个分号结尾`;;`

0 commit comments

Comments
 (0)