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