结构化命令

  shell按照出现的次序来处理shell脚本中的每个单独命令。

if-then语句

if command
then
    commands
fi

bash shell的if语句会运行if行定义的那个命令。如果该命令的退出状态码是0,位于then部分的命令就会被执行。

如果该命令的退出状态码是其他什么值,那then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令。

#!/bin/bash
if asdfg
then
    echo "it did not worked"
fi
echo "we are outside of the if statement"

在then部分,你可以用多个命令。

#!/bin/bash
testuser=liuxj
if grep $testuser /etc/passwd
#if asdfg
then
    #echo "it did not worked"
    echo The bash files for user $testuser are:
    ls -a /home/$testuser/.b*
fi

if-then-else语句

if command
then
    commands
else
    commands
fi

当if语句中的命令返回退出状态码0时,then部分中的命令会被执行,当if语句中的命令返回非零退出状态码时,bash shell会执行else部分中的命令。

嵌套if

elif会通过另一个if-then语句来延续else部分:

if command1
then
    commands
elif    command2
then
    more commands
fi

elif语句行提供了另外一个要测试的命令,类似于原始的if语句。如果elif后命令的退出状态码是0,则bash会执行第二个then语句部分的命令。

注意:你可以将多个elif语句串起来,形成一个大的if-then-elif嵌套组合。

if command1
then
    command set 1
elif command2
then
    command set 2
elif command3
then
    command set 3
elif command4
then
    command    set 4
fi

test命令

test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0,就会执行then后面的命令。否则if-then语句就会失效。

if test [condition]
then
    commands
fi

bash shell提供另一种if-then语句中的声明test命令的方法:

if [condition]
then
    commands
fi

注意:必须在左括号右侧和右括号左侧各加一个空格,否则会报错。

bash shell能处理的数仅有整数

gedit test &:打开编辑窗口,可以不关闭就可以调试。

& 放在启动参数后面表示设置此进程为后台进程

默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作,对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。

tianfang > run &
    [1] 11319
tianfang >

进程切换到后台的时候,我们把它称为job。切换到后台时会输出相关job信息,以前面的输出为[1] 11319例:[1]表示job ID是1,11319表示进程ID是11319。切换到后台的进程,仍然可以用ps命令查看。

&&

shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时(我认为是非0的数,返回值在0-255间),表示执行失败。

有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。

语法格式如下:

command1 && command2 [&& command3 ...] 
1 命令之间使用 && 连接,实现 逻辑与的功能。 
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 
3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。 --短路的功能
 
command1 || command2 [|| command3 ...] 
1 命令之间使用 || 连接,实现 逻辑或的功能。 
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。 
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。 --直到返回真的地方停止执行。
原文地址:https://www.cnblogs.com/Caden-liu8888/p/6044550.html