Shell
http://www.jcwcn.com/article-31939-1.html
file hello
#!/bin/bash # This is a very simple example echo Hello World
执行(有三种方式):
$bash hello
$sh hello
$./hello (由于hello文件中第一行指明了/bin/bash文件,系统会调用/bin/bash程序去解释执行)
1.2 关于输入、输出和错误输出
> 表示输出(标准输出和标准错误输出)重定向符号
>> 表示不清除原文件内容,而追加输出。
例如:
$ ls > ls_result
$ ls -l >> ls_result
稍微复杂一点的
$ find /home -name lost* 2> err_result
在符号“>”前多了个“2”,表示将标准错误输出重定向。
将标准错误输出和标准输出都被存到文件中:
$ find /home -name lost* > all_result 2>&1
简写
$ find /home -name lost* >& all_result
如果出错信息并不重要
$ find /home -name lost* 2> /dev/null
试验:
$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result
另外一个非常有用的重定向操作符是 "-",请看下面这个例子:
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭
1.3 BASH中对变量的支规定
没有定义,不赋值该变量为空(是NULL,不是0)。
#!/bin/bash # give the initialize value to STR STR="Hello World" echo $STR
一、变量赋值时,‘=’左右两边都不能有空格
二、BASH中的语句结尾不需要分号';'
三、除了在变量赋值和在FOR循环语句头中,BASH中的变量使用必须在变量前加“$"符号。
四、由于BASH程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始Shell中同名变量的值,也不会影响他们的运行。
更标准的变量引用方式是${STR},$STR是对${STR}的一种简化。
关于整数变量计算,一般通过let和expr这两个指令来实现
let "x = $x + 1" 或 x = `expr $x + 1`
#!/bin/bash x=1999 let "x = $x + 1" echo $x x=`expr $x + 1` echo $x x="olympic'"$x echo $x
局部变量
在变量首次被赋值时加上local关键字
#!/bin/bash HELLO=Hello function hello { local HELLO=World echo $HELLO } echo $HELLO hello echo $HELLO