linux如何同时执行两个命令,如何同时运行两个或者多个终端命令

发布时间 2023-06-11 10:32:20作者: 奥兰王子
[ -d ~/aa ] || mkdir ~/aa
[ -f  ~/sample.txt ] && echo "Fiel exits" || touch ~/sample.txt

  查看前一条命令的返回值

echo $?

  echo $?

查看命令执行成功与否的原理
“进程生命周期”

当一个进程执行完毕时,该进程会调用一个名为 _exit 的例程来通知内核它已经做好“消亡”的准备了。该进程会提供一个退出码(一个整数)表明它准备退出的原因。按照惯例,0用来表示正常的或者说“成功”的终止。

也就是说我们在执行 echo $? 时反回的值就是进程的退出码。而且,这个退出码是由刚刚执行完的进程提供给系统内核的

 Linux中echo $命令的作用

echo $$ 返回登录shell的PID
echo $? 返回上一个命令的状态,0表示没有错误,其它任何值表明有错误
echo $# 返回传递到脚本的参数个数
echo $* 以一个单字符串显示所有向脚本传递的参数,与位置变量不同,此选项参数可超过9个
echo $! 返回后台运行的最后一个进程的进程ID号
echo $@ 返回传递到脚本的参数个数,但是使用时加引号,并在引号中返回每个参数
echo $- 显示shell使用的当前选项
echo $0 是脚本本身的名字
echo $_ 是保存之前执行的命令的最后一个参数
echo $1 传入脚本的第一个参数
echo $2 传入脚本的第二个参数

 

87c58728013018339b68a81ce03c0365.png

选项一:分号(;)运算符

1a9312d3670801dc634b3553344537ca.png

分号(;)运算符允许你连续执行多个命令,而不管前面的每个命令是否成功,例如,打开终端窗口(在Ubuntu和Linux Mint中 Ctrl Alt T),然后,在一行中键入以下三个命令,用分号分隔,然后按Enter,这会列出当前目录(ls ),找出你当前在(pwd )中的目录,然后一次显示你的登录名(whoami )。ls ; pwd ; whoami

不必在分号和命令之间加上空格,可以将三个命令输入为: ls;pwd;whoami,

da90f006adf8bf26e442d394f43c2828.png

选项二:逻辑与运算符(&&)

如果希望第二个命令仅在第一个命令成功后运行,请使用逻辑与运算符分隔这些命令,即两个和运算符(例如,希望创建一个名为MyFolder的目录,并在成功创建该目录后,将它更改为,在命令行上键入以下内容并按Enter。mkdir MyFolder && cd MyFolder

文件夹已成功创建,因此cd命令被执行,现在位于新文件夹中。

建议在大多数情况下使用逻辑与运算符,而不是分号运算符(; ),例如,如果你运行一个命令来更改目录,然后强制递归地删除该目录中的所有内容(cd /some_directory ; rm -Rf * 如果目录更改没有发生,你最终会破坏掉系统。

23e6df141d45e34f8eab0b5f814dcf12.png

选项三:逻辑or运算符(||)

有时你可能希望在第一个命令不成功时执行第二个命令,为此,使用逻辑or运算符,或者两个垂直条(|| ),例如,要检查MyFolder目录是否存在([ -d ~/MyFolder ] 如果不是(mkdir ~/MyFolder ),则创建它,在提示符下键入以下命令并按Enter。[ -d ~/MyFolder ] || mkdir ~/MyFolder

确保在第一个括号之后,第二个括号之前或第一个命令之前有一个空格,用于检查目录是否存在无法工作。

在的示例中,MyFolder目录不存在,因此第二个命令创建目录。

f1de9c0ae58915e184c9bdc434c228c1.png

组合多个运算符

也可以在命令行上组合多个运算符,例如,希望首先检查文件是否存在([ -f ~/sample.txt ] 如果是这样,把一条信息打印到屏幕上,说(echo"File exists," ),如果没有,创建文件(touch ~/sample.txt ),在命令提示符下键入以下内容,然后按Enter。[ -f ~/sample.txt ] && echo"File exists." || touch ~/sample.txt

在的示例中,文件不存在,因此它被创建。

9e462290dfa7c98cb0c0131fba1e5613.png

以下是用于组合命令的每个运算符的有用摘要:A;B =运行A和B,而不考虑A的成功或失败, A && B =仅当A成功时运行B A || B =仅当A失败时运行B