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 ...]
command1 || command2 [|| command3 ...]