1.先看一个常用的命令
这个命令组合了几个不同的shell命令,shell命令是有这种特性在里面的。就是统一性,简单性。
可以通过管道命令组合多个shell命令。如上面的命令,分别是:
显示当前运行的进程,sort是对进程进行排序,uniq是去除重复的情况,grep -v sh 是去掉,不展示sh这个进程,而more则表示展示更多。
同样的,命令也可以这样写:
使得命令执行结果重定向到文本文档中。
2. 交互式shell编程的应用
学过编程的人,对这个例子不会感到陌生。唯一可能存在疑惑的地方是 file 是个什么东西?
在这里,file是变量。而$file表示shell编程中的引用变量。当然,也可以使用别的名称,但是显然file这个名称更方便理解。
3. Shell中的变量
shell编程的特点就是简洁,因此在语法、变量使用上有些让人迷惑。但是没办法,就是这样定义实现的!
Shell中的变量定义是随时定义随时可以使用,在使用的时候若想取得变量的值,
需要者变量前面加上美元符,如 $file 就会替换成file的值;
如下:
使用双引号是为了将有空格的字符串包含起来,避免出现错误。
如果使用单引号,或者在$前面加上一个反斜杠/,那么该变量名就不会去替换值,而是输出本身的名称,如下:
4. Shell变量的赋值
这个有两种方法,一种是直接赋值,如
file = "My File"
另一种是从标准输入读入,如
5. Shell编程中的环境变量
任何编程都要有环境变量,shell也不例外。它更多的依附的是系统本身的变量情况,当然也可以自己指定。
执行命令,env,或者执行命令
都会看到这个变量的值。为什么要加上$这个符号呢,这样才能展示变量的值哦!
而对于win系统来讲,在cmd中,展示环境变量是 echo %HOME%
6. Shell编程中的参数变量
先看下面一个例子:
运行这个脚本
显示结果是
Hello
The program test.sh is now running
The second para is b
The first para is a
The env Home is HOME/USR/
所以,这里很清楚了,关于shell编程中的参数调用;和C语言中main函数的 char **argv是类似的!
ps:
Unix/Linux系统都是支持标准输入、输出、错误重定向的。用0、1、2分别表示标准输入、输出、错误,用符号>和<表示输出和输入重定向。
如打开一个文件,
vi test.txt
也可以这样打开
vi 0<test.txt
更多内容可以google "标准输入、输出、错误"。
再ps:为什么写的sh程序不能执行?
请查看该文件的权限,并对该文件添加可执行权限,chmod +x test.sh 即可;
或者是程序命名和系统命令冲突,这时执行的时候使用 ./test.sh 可以将当前程序脚本的完整路径告诉shell。