一、简介
1.bash脚本是什么? bash是一个为GNU计划编写的Unix shell。它是一些命令的堆积,配合简单的语法组成。
二、基础知识
1.脚本调试 1)bash -n /path/to/some_scripts 检测脚本语法错误 如:bash -n test.sh 2)bash -x /path/to/some_scripts 调试执行 如:bash -x test.sh 2.变量 变量:命名的内存空间数据存储方式: 字符: 数值:整型,浮点型 变量:变量类型 作用: 1、数据存储格式 2、参与的运算 3、表示的数据范围 类型: 字符数值:整型、浮点型 变量命名规则: 变量命名法则: 1、不能使程序中的保留字:例如if, for; 2、只能使用数字、字母及下划线,且不能以数字开头 3、见名知义 4、统一命名规则:驼峰命名法 2.bash变量种类: 根据变量的生效范围等标准: 本地变量:生效范围为当前shell进程;对当前shell之外 的其它shell进程,包括当前shell的子shell进程均无效 环境变量:生效范围为当前shell进程及其子进程 局部变量:生效范围为当前shell进程中某代码片断(通常 指函数) 位置变量:$1, $2, ...来表示,用于让脚本在脚本代码中调用通过命令行传递给它的参数 特殊变量:$?, $0, $*, $@, $# 变量赋值:name="value" (1) 可以是直接字串;name=“root" (2) 变量引用:name="$USER" (3) 命令引用:name=`COMMAND`,name=$(COMMAND) 变量引用:${name}, $name "":弱引用,其中的变量引用会被替换为变量值 '':强引用,其中的变量引用不会被替换为变量值,而保 持原字符串 显示已定义的所有变量:set 删除变量:unset name
环境变量:
变量的声明、赋值:export name=value declare -x name=value 变量引用:$name,${name} 显示所有的环境变量:export,env,printenv 删除:unset name,有许多内建的环境变量:PATH, SHELL,USRE,UID, HISTSIZE, HOME, PWD, OLDPWD, HISTFILE, PS1
只读变量:只能声明,不能删除和修改
readonly name declare -r name declare -rx name
位置变量:
在脚本中调用通过命令行传递给脚本的参数
$1, $2, ...:对应第1、第2等参数,shift [n]换位置 $0:脚本名称 $*:传递给脚本的所有参数,全部参数合为一个字符串 $@:传递给脚本的所有参数,全部参数为独立字符串 $#:传递脚本的参数的个数 $@,$*只对被双引号包起来的时候会有差异
算术类型:
bash中的算术运算: help let +, -, *, /, %取模(取余), **(乘方) (1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式)) (4) var=$(expr arg1 arg2 arg3 ...) (5) declare –i var = 数值 (6) echo ‘算术表达式’ | bc
赋值:
1)增强型赋值 +=,-=,*=,/=,%= 2)自增,自减 let var+=1 let var++ let var--
逻辑运算
与: 1 与 1 = 1 1 与 0 = 0 0 与 1 = 0 0 与 0 = 0 或: 1 或 1 = 1 1 或 0 = 1 0 或 1 = 1 0 或 0 = 0 非:! ! 1 = 0 ! 0 = 1 true, false 1, 0 短路运算: 短路与: 第一个为0,结果必定为0; 第一个为1,第二个必须要参与运算; 短路或: 第一个为1,结果必定为1; 第一个为0,第二个必须要参与运算; 异或:^ 异或的两个值,相同为假,不同为真
聚集命令:
有两种聚集命令的方法: 复合式:date; who | wc -l 命令会一个接一个地运行 子shell:(date; who | wc -l ) >>/tmp/trace 所有的输出都被发送给单个STDOUT和STDERR
退出状态:
1)0表示成功,1-255表示失败 2)$?测试最后一条命令执行的状态结果
退出状态码:
bash自定义退出状态码 exit [n]:自定义退出状态码; 注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出 状态取决于exit命令后面的数字 注意:如果未给脚本指定退出状态码,整个脚本的退出状态码 取决于脚本中执行的最后一条命令的状态码 exit 3 eixt 1 exit 2...表示执行错误退出。
条件测试:
判断某需求是否满足,需要由测试机制来实现; 专用的测试表达式需要由测试命令辅助完成测试过程; 评估布尔声明,以便用在条件性执行中 若真,则返回0 若假,则返回1 测试命令: test expression [ expression ] [[ expressison ]]
bash的数值测试:
-gt: 是否大于; -ge: 是否大于等于; -eq: 是否等于; -ne: 是否不等于; -lt: 是否小于; -le: 是否小于等于;
字符串测试:
==:是否等于; >: ascii码是否大于ascii码 <: 是否小于 !=: 是否不等于 =~: 左侧字符串是否能够被右侧的PATTERN所匹配 注意: 此表达式一般用于[[ ]]中; -z "STRING":字符串是否为空,空为真,不空为假 zero -n "STRING":字符串是否不空,不空为真,空为假 nozero 注意:用于字符串比较时的用到的操作数都应该使用引号
文佳测试:
-a,-e file:文件存在性测试,存在为真,不存在为假的, -b file:是否为块状设备 -c file:是否为字符设备 -d file:是否为目录 -f file:存在的文件 -h FILE 或 -L FILE:存在且为符号链接文件; -p FILE:是否存在且为命名管道文件; -S FILE:是否存在且为套接字文件;
组合测试条件:
第一种方式: COMMAND1 && COMMAND2 并且 COMMAND1 || COMMAND2 或者 ! COMMAND 非 如:[ -e FILE ] && [ -r FILE ] 第二种方式: EXPRESSION1 -a EXPRESSION2 并且 EXPRESSION1 -o EXPRESSION2 或者 ! EXPRESSION 必须使用测试命令进行;
本文转自chengong1013 51CTO博客,原文链接:http://blog.51cto.com/purify/1836818,如需转载请自行联系原作者