linux-shell脚本

注释

// 行注释
# 注释信息
// 块注释
#!/bin/bash
echo "Adding new users to LDAP Server..."
<<COMMENT1
Master LDAP server : dir1.nixcraft.net.in
Add user to master and it will get sync to backup server too
Profile and active directory hooks are below
COMMENT1
echo "Searching for user..."

赋值给变量

var=$(command)

if 判断

# 这里的-f参数判断 /data/filename 是否存在
if [ ! -f "/data/filename" ]; then
echo "文件不存在"
else
rm -f /data/filename
fi

# 字符串相等
if [ "$ver"x = "20x1018191"x ]; then
echo "Version=20x101819"
else
echo "Version!=20x101819"
fi

比较两个字符串是否相等的办法是:
if [ "$test"x = "test" ]; then
这里的关键有几点:
1 使用单个等号
2 注意到等号两边各有一个空格:这是unix shell的要求
3 注意到"$test"x最后的x,这是特意安排的,因为当$test为空的时候,上面的表达式就变成了x = testx,显然是不相等的。
而如果没有这个x,表达式就会报错:[: =: unary operator expected


# 逻辑或
if [ "$ver" = "20x1018191" ] || [ "$ver" = "11x061121" ]; then
echo "Version=20x101819"
else
echo "Version!=20x101819"
fi

调用命令

data=$(command)

遍历字符串

commonApp="64sqlserver|64ctrl|boa_1203_arm"

for var in $(echo ${commonApp} | awk '{split($0,arr,"|");for(i in arr) print arr[i]}')
do
echo "${var}"
done

函数

注意:所有函数在使用前必须定义。调用函数仅使用其函数名即可。

#!/bin/bash

demoFun(){
echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
–b 当file存在并且是块文件时返回真
-c 当file存在并且是字符文件时返回真
-d 当pathname存在并且是一个目录时返回真
-e 当pathname指定的文件或目录存在时返回真
-f 当file存在并且是正规文件时返回真
-g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p 当file存在并且是命令管道时返回为真
-r 当由pathname指定的文件或目录存在并且可读时返回为真
-s 当file存在文件大小大于0时返回真
-u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
UNIX Shell 里面比较字符写法:
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-le 小于等于
-ge 大于等于
-z 空串
= 两个字符相等
!= 两个字符不等
-n 非空串