详细信息可以通过man bash来查看
以#开头直到行的结束来表示注释。 在文件的第一行以#!开头是告诉系统用来执行shell的程序,如:
#!/bin/sh
对变量不需要额外的声明语句,直接进行复制就可以了:
a="value"
变量和值都需要紧跟着=,不能有空格,通过变量$来引用变量,以防和其他文字混淆,可使用{}来区分:
num=1
echo $num
echo "No ${num}nd"
对于参数$#,$@,$0,$1,$2的含义解释:
$1~$n 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。
例如 func a1 a2则会有如下输出
$$ is 53310
$! is
$? is 0
$* is a1 a2
$@ is a1 a2
$# is 2
$* is a1 a2
$0 is ./maintest.sh
$1 is a1
$2 is a2
if ....; then
....
elif ....; then
....
else
....
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件 是否存在及是否可读等等… 通常用[ ] 来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 判断文件时需要注意要有引号引着
[ ! expression] — 逻辑非 详情请看shell条件表达式
执行man test可以查看所有测试表达式可以比较和判断的类型
case ... in
...) do sonething
;; # ;;这个为分支的结束
...
*) # 其他情况
esac
while ... ; do
...
done
for var in ... ; do
...
done
函数的声明如下,并且需要先声明再使用。
functionname()
{
...
}
#或者
function func()
{
...
}
将一个命令的输出作为另外一个命令的输入,使用 |
ps -ef | grep keyword
linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2
重定向输出的格式 像这样 command [1-n] > file或文件操作符或设备,如果指定为文件则将命令的结果输出到文件,而不是标准输出 ;
> 写入文件并覆盖旧文件
>> 加到文件的尾部,保留旧文件内容
反短斜杠 ` 可以将一个命令的输出作为另外一个命令的一个命令行参数
tar -zcvf lastmod.tar.gz \`find . -mtime -1 -type f -print\`
#find . -mtime -1 -type f -print为查找过去1天内修改过的文件内容
在脚本的目录下有一个脚本 a.sh
a.sh — (中间有空格)此方法不打开新进程,可以使用父进程的变量func 来进行赋值,并且不会将函数或者脚本的echo输出到标准输出中(不会打印在控制台上) func()
{
echo "hi"
}
b=`func`
echo $b #输出 hi
bash shell http://blog.csdn.net/hudashi/article/details/6877351