Shell编程参考手册

1. 脚本注释

#!/usr/bin/env bash
# Desc: shell script reference notes

2. 脚本执行与调试

./fileName.sh  # 需要执行权限, chmod +x
sh fileName.sh # 脚本中有exit,会退出当前shell
. fileName.sh
source fileName.sh
# 调试
sh -x fileName.sh
# 开启调试
set -x
# 关闭调试
set +x
# 打印日志
function echo_log()
{
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $@" >> run.log
}

3. 变量赋值及引用

  • 变量赋值使用$(data)
  • 对变量进行引用或字符串组合时,使用${}将变量扩含起来
  • 处理字符串,加双引号""
# 脚本中执行或引入库函数
. ./filename
# 返回脚本所在目录
cd $(dirname $0)

4. 输入与输出

# 0  stdin  标准输入
# 1  stdout 标准输出
# 2  stderr 标准错误输出
./filename.sh 1>output 2>error
# 标准输出定向到黑洞设备,不显示输出
./filename >/dev/null 2>&1

5. 比较运算符

# comparison operator
# 文件比较运算符
[ -e filename ]  # filename存在,则为真
[ -s filename ]  # filename存在且大小大于0
[ -d filename ]  # filename为目录,则为真
[ -f filename ]  # filename为文件,则为真
[ -L filename ]  # filename为符号链接,则为真
[ -r filename ]  # filename可读,则为真
[ -w filename ]  # filename可写,则为真
[ -x filename ]  # filename可执行,则为真
[ filename1 -nt filename2 ]  # filename1比filename2新,则为真
[ filename1 -ot filename2 ]  # filename1比filename2旧,则为真

# 字符串比较运算符
[ -z string ]  # string长度为零,则为真
[ -n string ]  # string长度为非零,则为真
[ "str1" = "str2" ]  # 字符串是否相同
[ "str1" != "str2" ]  # 字符串是否不同

# 算术比较运算符
-eq  # 等于
-ne  # 不等于
-lt  # 小于
-le  # 小于或等于
-gt  # 大于
-ge  # 大于或等于

# 逻辑运算符
&&  # and
||  # or

# 布尔运算符
-a # 与运算
-o # 或运算
!  # 非运算
[ $a -lt 100 -a $a -gt 90 ] && echo "great"
[ ! -e fileName ] && touch fileName 

6. 位置参数

# positional paramter
$#  # 表示位置参数的数量
$*  # 表示所有位置参数的内容"a b c"
$?  # 表示命令执行后返回的状态,成功返回0;不成功,返回非0
$$  # 表示当前进程的进程号
$!  # 表示后台运行的最后一个进程号
$0  # 表示当前进程名
$@  # 表示所有位置参数"a" "b" "c"
$n  # (n为1-9)就是位置变量

7. 流程控制

# if
function if_func()
{
    if [ "$a" -ge "90" ]; then
        echo "A"
    elif [ "$a" -ge "60" ]; then
        echo "B"
    else
        echo "C"
    fi
}

# case
function case_func()
{
case "$input" in
    start)
        start;;
    stop)
        stop;;
    status)
        status;;
    version)
        version;;
    *)
        echo "Usage: $0 {start|stop|status|version}"
        exit 1
esac
}

# for
function for_func01()
{
for i in $(seq 1 10)
do
    echo $i
done
}

function for_func02()
{
for ((i=1;i<=10;i++))
do
    echo $i
done
}

# while
function while_func()
{
i=0;
while [ $i -lt 10 ]
do
    ((i++))
    echo $i
done
}

# until
function until_func()
{
i=0;
until [ $i -eq 10 ]
do
    ((i++))
    echo $i
done
}
posted @ 2018-10-15 23:28  rustling  阅读(445)  评论(0编辑  收藏  举报