()和{}
()和{}都是对一串命令进行执行,但有所区别:
- 相同点:()和{}都是把一串的命令放在括号里面,并且命令之间用;号隔开
- 不同点:()会对一串命令新开一个子shell进行执行,{}对一串命令在当前shell执行
说明: - ()最后一个命令可以不用分号,{}最后一个命令必须要用分号
- ()里的第一个命令和左边括号之间不必有空格,{}的第一个命令和左括号之间必须要有一个空格
- ()和{}中括号里面的某个命令的重定向只影响该命令,但括号外的重定向则影响到括号里的所有命令
示例:
条件判断 [ ]
语法:
[ condition ]
注意:
- 注意condition前后要有空格
- 条件非空即为true,比如:[ hc ]返回true,[] 返回false。
示例:
上面代码中的:
- -w :有写的权限(write)
- -x : 有执行的权限(execute)
if语句
if 语句的语法:
if [ expression ]
then
/ / … 语句
fi
如果 expression 返回 true,then 后边的语句将会被执行;如果返回 false,不会执行任何语句
注意:
- 最后必须以 fi 来结尾闭合 if
- expression 和方括号([ ])之间必须有空格,if后要有空格
- then关键字必须单独一行
示例:
if … else语句的语法:
if [ expression ]
then
/ / … 语句1
else
/ / … 语句2
fi
如果 expression 返回 true,那么 then 后边的语句将会被执行;否则,执行 else 后边的语句。
示例:
示例:判断文件是否存在,存在读取,不存在创建
if … elif语句的语法:
if [ expression 1 ]
then
/ / … 语句1
elif [ expression 2 ]
then
/ / … 语句2
elif [ expression 3 ]
then
/ / … 语句3
else
/ / … 语句4
fi
哪一个 expression 的值为 true,就执行哪个 expression 后面的语句;如果都为 false,那么不执行任何语句。
示例:
case语句
case 语句用来匹配一个值或一个模式,如果匹配成功,执行相匹配的命令。
一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。如果无一匹配模式,使用星号 * 捕获该值,再执行后面的命令。
case 语句格式如下:
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac
注意:
- case行尾必须为单词
in,每一个模式匹配必须以右括号“)”结束 - 取值可以为变量或常数
- 双分号
;;表示命令序列结束,相当于java中的break - 最后的
*)表示默认模式,相当于java中的default
示例:
for循环
语法:
for 变量 in 列表
do
command1
command2
…
commandN
done
列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。
in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。
示例
中间遍历字符串时,不能获取字符串中的每一个元素,只能将字符串当成一个整体处理
示例:
for后面的分号可有可无。
while循环
语法:
while command
do
Statement(s) to be executed if command is true
done
示例:
示例:
while 后面的分号可有可无。
跳出循环
break 命令
break 命令允许跳出所有循环(终止执行后面的所有循环)。
示例:
continue 命令
continue 命令与 break 命令类似,但它不会跳出所有循环,仅仅跳出当前循环。
示例:
