shell脚本编程基础
1、基本格式
首先在编写shell的开始要声明一下该shell所用的脚本类型,我们也称为shebang机制
eg: #!/bin/bash # Description ...
2、bash中的变量的种类
(1)、本地变量 生效范围: 当前shell进程,对当前shell之外的进程及子进程均无效 (2)、环境变量 生效范围: 当前shell进程及其子进程 变量声明 export name=Value declare -x name=Value 变量撤销 unset name 变量引用 $name 或 ${name} 显示所有的环境变量 env 、export、declare -x 、printenv (3)、局部变量 生效范围: 当前shell进程中某片代码段(通常指函数) (4)、位置变量: 用$1 $2 $3 ... 来表示,用于脚本中调用传递给它的参数 只读变量: 只能声明,但不能修改和删除 声明变量 readonly name declare -r name 查看只读变量 readonly -p (5)、特殊变量: $? $0 $* $@ $# $$ $? 检查上一条命令是否执行成功 echo $? 成功为0 非0不成功 $0 表示命令本身 $# 表示传递给脚本的参数个数 $* 传递给脚本的所有参数 "$*" 将全部参数合并为一个字符串 $@ 传递给脚本的所有参数 "$@" 每个参数为单独的字符串 $$ 显示当前自己的进程编号 (6)、在shell中() {}的区别 (): 表示在当前shell的子进程中再开一个进程 {}: 不在当前的shell进程中开子进程,顺序执行 eg: [root@Centos6 ~]#x=abc;(echo $x;x=def;echo $x);echo $x abc def abc [root@Centos6 ~]#x=abc;{ echo $x;x=def;echo $x; };echo $x abc def def
3、算数运算
(1)、算数运算 包括: + - \* / % ** 实现算术运算: let Var=expression [root@Centos6 ~]#a=100 [root@Centos6 ~]#b=200 [root@Centos6 ~]#let c=a+b [root@Centos6 ~]#echo $c 300 Var=$[expression] [root@Centos6 ~]#c=$[a+b] [root@Centos6 ~]#echo $c 300 Var=$((expression)) Var=$(expr arg1 arg2 ...) 注: 参数间要有空格 [root@Centos6 ~]#c=$(expr $a + $b) [root@Centos6 ~]#echo $c 300 declare -i Var=Value echo "expression" | bc bash中有内建的随机数生成器 echo "$[$RANDOM%100]" : 生成0-99之间的随机数 [root@Centos6 ~]#echo "$[$RANDOM%100]" 53 (2)、赋值 增强型赋值: += -= *= /= %= eg: let a+=5 ==》a=a+5 其中 ++a : a先自加1后在赋值给a a++ : 先赋值后自加1
4、条件测试
(1)、条件判断
判断方法: test expression [ expression ] 注意: 表达式与[]间要有空格,不支持正则表达式 [[ expression ]] 支持正则表达式 判断一个参数是否被赋值 [ "$a" ] echo $? 0为被赋值 非0未被赋值 短路与 && eg: CMD1 && CMD2 CMD1为真CMD2才执行 短路或 || eg: CMD1 || CMD2 CMD1为假CMD2才执行 与 -a 或 -o 非 -not 或!
(2)、字符串判断
字符串 : == :是否等于 > :ASCII码是否大于 < :ASCII码是否小于 != :是否不等于 =~ :左侧字符串能否被右侧的PATTERN所匹配 注:此表达式一般用于[[ ]];扩展的正则表达式 eg: [[ $a =~ ^-?[0-9]+$ ]] 判断$a是否为数字(正数、负数、0) [ -z "$a" ] 空为真 [ -n "$a" ] 非空为真
(3)、文件存在性判断
文件判断: -a file : -e file : 文件是否存在,存在为真,反之为假 eg : [ -e "file" ] 所属类别: -b file:是否存在且为块设备文件 -c file:是否存在且为字符设备文件 -d file:是否存在且为目录文件 -f file:是否存在且为普通文件 -h | -L file:是否存在且为连接文件 -p file:是否存在且为管道文件 -S file:是否存在且为套接字文件 权限类: -r file:是否存在r权限的文件 -w file:是否存在w权限的文件 -x file:是否存在x权限的文件 -u file:是否存在suid权限的文件 -g file:是否存在sgid权限的文件 -k file:是否存在sticky权限的文件 文件大小: -s file: 文件是否存在且非空 双目测试: file1 -ef file2 :file1与file2是否指向同一个设备上的inode file1 -nt file2 :file1是否新于file2 file1 -ot file2 :file1是否旧于file2
5、read命令接受参数的输入
从标准输入中读取值,给每个单词分配一个变量,剩余的单词都被分配给最后一个变量 -p :指定要显示的信息 -s :静默输入 -d :指定输入的结束符 -t#:超时时间 eg : read -p "Please input a arguement" aaa 特殊用法: read a b c <<< "xxx yyy zzz"可以将值附给a b c
原创文章,作者:M25_ymd,如若转载,请注明出处:http://www.178linux.com/83609