Shell
shell属弱类型编程语言。
强弱的区分:
强:变量在使用前,必须事先声明,甚至还需要初始
弱:变量使用时声明,甚至部区分类型
bash变量类型
环境变量 本地变量(局部变量) 位置变量 特殊变量本地变量:
bash: VATNAME=VALUE:作用域为整个bash进程局部变量: local varname=value;作用域为当前代码段环境变量:作用域为当前shell进程及其子进程 export varname=value name=value export name ”导出“位置变量:
$1,$2... shift如:
[root@localhost shell]# cat shift.sh #!/bin/bash echo $1 shift echo $1 shift echo $1 [root@localhost shell]# [root@localhost shell]# ./shift.sh 1 2 3 1 2 3 [ shell]#特殊变量:
1. $?上一个命令的执行状态返回值 程序执行,可能有两类返回值 程序执行结果 程序状态返回代码(0-255) 0:正确执行 1-255:错误执行 1,2,127系统预留 2. $# 参数的个数 3. $* 参数列表 4. $@ 参数列表/dev/null 软设备 bit bucket数据黑洞
撤销变量 unset VARNAME查看当前shell中变量 set查看当前shell中的环境变量 set env export脚本:命令的堆砌,按实际需要,结合命令流程控制机制实现的源程序
shebang:魔数 #!/bin/bash #开头为注释行,不执行脚本在执行时会启动一个子shell进程
命令行中启动的脚本会继承当前shell环境变量 系统自动执行的脚步(非命令行启动)引用变量:作用域为当前shell进程及其子进程
${varname}
name=pao; echo “THe hello word ${name}”,条件判断
如果用户不存在 添加用户,给密码并显示添加成功 否则 显示如果已经存在,没有添加bash中如何实现条件判断?条件厕所类型 整数测试 字符测试 文件测试条件测试的表达式: 【 expression 】 【【expression】】 test expression整数比较: -eq:测试两个整数是否相等 如; $a -eq $b -ne:测试两个整数是否相等,不等为真,,相等为假 -gt:测试一个数是否大于另一个数;大于为真,否则为假 -lt:测试一个数是否小与另一个数;小与为真,否则为假; -ge:大于或等于 -le:小于或等于文件测试 -e 文件 测试文件是否存在 -f 文件 测试文件是否为普通文件 -d 文件 测试知道路径是否为目录 -r 文件 测试当前用户对指定文件是否有读取权限 -w 文件 测试当前用户对指定文件是否有写权限 -x 文件 测试当前用户对指定文件是否有可执行权限 【 -e /etc/inittab 】命令间的逻辑关系:
逻辑与:&& 第一个条件为假时,第二个条件不用在判断,最终结果已经有 第一个条件为真时,第二条件必须要判断 逻辑或:||条件判断,控制结构
单分支if语句if 判断条件;then
statement1 statement2 .... fi 双分支if语句 if 判断语句;then statement1 statement2 .... else statement3 statement4 ...... fi多分支if语句
if 判断条件;then statement1 ...... elif 判断条件2;then statement2 ...... else ...... fi 测试脚本是否有语法错误 bash -n 脚本文件脚本单步执行 bash -x 脚本文件定义脚本退出状态码 exit:退出脚本 exit # 如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出码shell中如何进行算术运算
a=3 b=6 1. let 算术运算表达式 算术运算命令 let =c=$a+$b 2. $(算术运算表达式) d=$[$a+$b] 3. $((算术运算表达式)) d=$(($a+$b)) 4. expr命令 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用 c= `expr $a + $b` 注:‘ ’ 为反单引号``