SHELL编程

程序开始与注释

1
#!/bin/bash

变量

shell变量

shell变量没有数据类型,都是字符串,即使数值也是字符串

a="hello" 等号两侧不能有空格

echo "${a}" 正常输出hello

echo '${a}'单引号会消除自缚含义,输出${a}

unset a 删除变量

readonly a=3 设置只读变量

echo $显示上一条指令的执行结果(0:成功;1:失败)

1
2
3
echo `date`
echo $(date) #以上两句等价
expr 4 + 5 #可以用于常见数值计算,必须留空格

标准变量或环境变量

系统预定义变量,一般在/etc/profile定义

HOME 用户主目录

PATH 文件搜索路径

PWD 用户当前工作目录

PS1、PS2 提示符

HOSTNAME LOGNAME

echo $HOME 输出实例

env看环境所有变量

export name把已经定义的本地变量变为全局变量

特殊变量

变量 含义
$1,$2... $1表示shell程序名称,$2开始为传入参数(argv)
$# 传递到脚本的参数列表,或表示参数的个数(argc)
$@ 传入脚本的全部参数(argv[1]--argv[n])
$* 显示脚本的全部参数
$? 前一个脚本的执行情况(0:成功,1:失败)
$$ 脚本运行的当前进程号
$! 运行脚本最后一个命令

运算符和表达式

算数运算符、逻辑运算符、复制运算符与C完全相同

计算表达式

  1. $(())
  2. $[]
  3. let var=
  4. expr 4 + 5

Test 命令的用法

  1. 判断表达式 and or

    -a -o

    test $(($Year%400)) -eq 0 -o $(($Year%4)) -eq 0 -a $(($Year %100)) -ne 0

  2. 判断字符串

    test -n 字符串a 字符串b

    -z 字符串长度为0 ==字符串相等 !=字符串不等

  3. 判断整数

    test 整数a -eq 整数b

    运算符 含义
    -ge 大于等于
    -gt 大于
    -le 小于等于
    -lt 小于
    -ne 不等于
  4. 判断文件

    test File1 -ef File2两个文件有相同的设备号和i节点号

    test File1 -nt File2文件1比文件2新

    test File1 -ot File2文件1比文件2旧

    单文件判断 eg:test -d File

    参数 含义
    -d 文件存在并且是目录
    -e 文件存在
    -f 文件存在并且是正规文件
    -r 文件存在并可读
    -w 文件存在并可写
    -x 文件存在并可执行

数组

a=(1 2 3 4)

a[0]=1;a[1]=2;a[2]=2

a=([1]=1 [2]=2)

1
2
3
4
echo ${a[2]} #输出下标为2的数据
echo ${#a[*]} #输出数组的长度
echo ${a[@]:2} #截取下标从2到最后
echo ${a[@]:1:2} #截取下标从1到2

if

1
2
3
4
5
6
7
8
9
10
if[]
then

elif[]
then

else


fi

case

1
2
3
4
5
6
7
8
9
10
11
case $1 in
"1")
xxxxxx
;;
"2")
xxxxxx
;;
*)
xxxxxx
;;
esac

for

1
2
3
4
for x in xxxx
do
xxxxxxx
done

while

1
2
3
4
while[]
do
xxxxx
done

until

1
2
3
4
until[]
do
xxxx
done

shell函数

1
2
3
4
5
6
7
8
function add()
{
echo$(($1+$2))
}
a=10
b=20
add a b
echo $?