对于以后想从事嵌入式软件开发工作的人来说,至少要能看懂shell脚本,最好能自己编写shell脚本,因为当你在linux操作系统做开发你会发现,shell脚本能够解决你总是重重复复做的一些事,给你节约很多宝贵的时间!那么什么是shell script呢?其实shell脚本是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件,将一些shell的语法与命令写在里面,搭配正则表达式,管道命令与数据流重定向,达到我们想要的处理目的。shell script本质上是shell命令的集合。
下面我们来学习最简单的shell script编写与执行:
编写:
[zoulei@CentOS test]$ vim test.sh
1 #!/bin/sh
2 a="hello world!"
3 num=2
4 echo "a is : $a num is ${num}"
***************************************************************************************************************************************************************************************************
注意:第一行#!/bin/sh声明这个script使用的shell名称,因为我们使用的是bash,所以必须要以#!/bin/sh来声明这个文件内的语法使用bash的语法,那么当这个程序被执行时,它就能加载bash的相关配置文件,并且执行bash来使下面的命令能够执行。
***************************************************************************************************************************************************************************************************
执行:[zoulei@CentOS test]$ sh test.sh
a is : hello world! num is 2
[zoulei@CentOS test]$ chmod a+x test.sh
[zoulei@CentOS test]$ ./test.sh
a is : hello world! num is 2nd
[zoulei@CentOS test]$ source test.sh
a is : hello world! num is 2
******************************************************************************************************************************************************************************************************
注意:这里执行test.sh脚本文件有三种方式,一种是sh test.sh,这里的sh命令其实是bash的符号连接。还有一种是当作可执行文件来执行,不过执行之前得将test.sh文件赋予可读可写可执行权限才行,第三种是source test.sh,它与前面两种的区别是,当我们写个脚本来改变环境变量,前面两种只是在子进程bash中执行,而第三种则会在父进程中执行,最终会使环境变量生效的是第三种执行方式。
******************************************************************************************************************************************************************************************************
下面在运用条件判断式if...then...fi 编写执行一个shell脚本:
编写与执行
[zoulei@CentOS test]$ vim test.sh
#!/bin/bash
echo -e "Hello world"
if [ "SHELL" = "/bin/bash" ];then
echo "your login shell is bash"
else
echo "your login shell is not bash but $SHELL"
fi
[ -f "/etc/shadow" ] && echo "this computer uses shadow passwords"
if [ -f "/etc/shadow" ];then
echo "电脑密码"
else
echo "并没有"
fi
[zoulei@CentOS test]$ sh test.sh
Hello world
your login shell is not bash but /bin/bash
this computer uses shadow passwords
电脑密码
**************************************************************************************************************************************************************************
注意:1.中括号【】使用格外小心,”[“后面必须跟一个空格,再跟“”,"】"前面也必须紧跟一个空格,否则会出错。
2.echo语句也必须紧跟一个空格,不然也会出错。
3.[ -f "/etc/shadow" ]语句是判断/etc/shadow是否是一个文件。
4.上面的shell脚本中只有一个判断式,可以这样看:
if [ 条件判断式 ]; then
当判断式成立时,可以进行命令的工作内容;
fi <==将if反过来写,成为fi,结束if 之意!
5.等号"="两边都必须要有空格,否则出错,在bash中一个等号与两个等号结果是一样的,通常一个等号代表“变量的设置”,两个等号则是代表
“逻辑判断”,由于中括号内重点在于“判断而非设置变量”,因此最好使用“==”较佳!
***************************************************************************************************************************************************************************