shell中连接符管道符小括号大括号的使用方法

shell中&&和||的使用方法

&&

command1 && command2  # command1执行成功才会执行command2

||

command1 || command2    # command1执行失败才会执行command2

有时会遇到要将shell命令写成一条的,可以用;来进行分隔,;不会判断前面的命令是否成成功或失败 例如:

command1 ; command2 ; command3	# 依次执行三条命令

&&||一起使用

cd /path/ && echo "sucess" || echo "fail"	# 如果切换至/path/目录成功,则输出sucess,否则输出fail

cd /path/ || (echo "fail" && mkdir -p /path/)	# 如果切换至/path/目录失败,则输出fail,并新建该目录

() {}的区别 ()中的命令结果是单独的,而不是全局的,例如以下例子中在()中定义的变量在()外则无效

[root@test]# a=1;echo $a;( a=2; echo $a );echo $a
1
2
1

{}中的命令结果不是单独的,而是全局的,例如以下例子中在{}中定义的变量在{}外同样有效

[root@test]# a=1;echo $a;{ a=2; echo $a; };echo $a
1
2
2

sh执行脚本提示 [[: not found

有时在shell脚本中使用if判断语句时使用了[[ 来对判断范围进行限定,使用sh命令来执行时提示

[[: not found

#! /bin/bash

if [[ $(cat /path/file) =~ "str" ]]
then
	:
else
	echo "Not True"
fi

以上脚本使用sh执行就会报错,如果给脚本添加执行权限使用./file.shbash file.sh。则不会报错。

这就涉及到sh 和 bash的区别

sh 和 bash 是两个不同的 shell。在第一种情况下,您将脚本作为参数传递给 sh 解释器,而在第二种情况下,您决定使用哪个解释器的第一行。

其实Linux中shell的类型有很多,其中常用的几种是

  • Bourne shell(sh) :是Unix最初使用的shell,并且在每种Unix上都可以使用

  • Bourne Again shell(bash):是Linux操作系统默认的shell,是sh的扩展。对sh完全向后兼容,并且在sh的基础上增加、增强了很多特性。

最后更新于