脚本编程基础知识点总结
一:关于脚本
- 1:linux下的脚本简单的概括起来就是将多个命令,变量 嵌套与不同的控制语句及函数中而组合起来的一个顺序执行命令的批处理任务
- 2:在linux中一个脚本的展开需以#!/bin/bash开始
- 下面可以附加一些关于脚本的相关的注释信息:比如:作者,脚本的要实现的功能,版本,时间等
3:最后一个脚本的执行时该脚本必须要有执行权限或者使用bash scripts_name 的形式执行- 4:脚本不需要编译执行,而是解释执行(执行效率比较低)。
二:基础
linux脚本中的变量不需要事先声明,而是直接定义使用(这点不同于其他高 级编程语言中变量的使用)
本地变量(局部变量):在一段代码串(一个函数或者控制语句等)中定义的变量 该变量在当前shell生效 环境变量 :当前使用的shell中定义的变量(export 定义的变量或者env,set中定义的变 改变量在当前设shell及其子shell中生效 特殊变量:常见的$?(一个命令的执行状态的返回值) 0 为正确结果,其他数值的为错误结果位置变量:$1 $2 $3....${10},${11}...${n}
变量的赋值:var_name=var_value 显示变量的值使用echo var_name
变量的引用:
- var_name=`COMMAND` 的形式引用
- 通过上面的例子我们可以发现
- 变量的引用时通过$符号加上变量名的形式引用变量的
- $var_name
关于命令的替换,必须明白三种符号 ""(双引号) ''(单引号) ``()的意义 看 下面的例子,我们由此展开
- "": 可以实现命令替换
- '': 变量强引用
- ``: 对命令的结果引用(命令替换) 上面的例子还可以使用echo $(cat a.txt)
命令的逻辑关系
- 命令的逻辑关于有三种
- 与关系
- command1&&command2
- command1 和command2 同时为真是结果才为真
- command1 和command 其中一个为假结果则为假
- 备注:当command1为真时command2才执行,command1为假时command不执行(结果已经明确了)
- 或关系
- command1||commadn2
- command1 和command2 同时为假是结果才为假
- command1 和command 其中一个为真结果则为真
- 备注:当command1为假时command2才执行,command1为真时command不执行(结果已明确了)
- 非关系
- !command
- 比命令的执行结果取反
例3:
一般格式 [ express ] 或者test express
[[ express ]] (代表关键字)
整数测试:
关于整数测试的符号有:
-gt(大于) -ge(大于等于)
-lt(小于) -le(小于等于)
-eq(等于) -ne(不等于)
- 整数的测试须放在[]中就行
例如:
- 注意[]内的两头必须有空格。
算术运算:
let [ express ]
expr express
例如:
注意两边的空格
字符串测试:
- (字符串的比较实际上其对应的ASCII的比较,另字符串的测试一般放在[[ ]]中进行
运算符:>(大于) >=(大于等于)
<(小于) <=(小于等于)
!=(不等于) =(等于
- -z "string":测试string字符串是否为空
- -n "string":测试string字符串是否不为空
例如
文件测试:
- -e:测试给出的条件是否存在
- -f:测试给出的条件是否是个文件
- -d:测试给出的条件是否是个目录
- -r:测试给出的文件是否具有读的权限(相应的有-w:写 -x:可执行)
例如:
三 :脚本编程中的控制语句
在脚本中if语句有三种:单分支,双分支,多分支
单分支 双分支 多分支
|
- if 条件;then if 条件;then if 条件1;then
- statement1 statement1 statement1
- statement2 else elif 条件2;then
- fi statement2 statement2
- fi elif 条件3;then
- ......
- fi
- # 如果 /etc/passwd 存在
- if [ -e /etc/passwd ];then
- #打印 exist
- echo "exist"
- fi
#如果 /etc/passwwd 存在 if [ -e /etc/passwwwd ];then #打印 exit echo "exist" else #打印 no exist echo "not exist" fi
- if [ -d /etc/passwd ];then
- echo "directory"
- elif[ -f /etc/passwd ];then
- echo"file"
- else
- echo "nothing"
- fi
在脚本编程中可以使用#注释一行代码。另if语句还可以嵌套使用
脚本中case 语句的格式
- case var in var:变量 var_value:变量取值
- var_value1)
- statement1
- ;; var_value2)
- statement2
- ;;
- *) ------其他任意值
- statement
- ;;
- esac
case语句中当var在var_value中获得到正确的结果是就退出case语句,下面statement不再执行 |
循环控制语句:
for循环的列表表示方法: 1:可以是 {起始值..结束值} 2:可以使用`seq 起始值 结束值` 3:还可以是命令(命令的执行可以得到一个列表) 例如:计算1到5之间的整数的和
- for 变量 in 列表;do
- statement()循环体
- done
注意:for循环的条件是变量在列表中可以取到值,否则将不执行 循环体语句,同样for循环也可以嵌套使用
- #!/bin/bash
- declare -i sum=0
- for i in {1..5};do
- sum=$[$sum + $i]
- done
- echo $sum
同样可以写成这样子
- for i in `seq 1 5`;do
- sum=$[$sum + $i]
- done
- echo $sum
- for i in `ls /root`;do
- if [ -f $i ];then
echo "$i is file" elif [ -d $i ];then echo "$i is directory" else echo "$i cann't identification" fi done
- while 条件;do
- statemnt(循环体)
- done
注意 1:while循环是在条件满足时进入循环,当条件不满足时退出循环体
2:循环体中须有让循环体自动的去判断条件语句的条件,否则循环将陷入死循环或者达不到我们预期的目的 3:条件可以是个命令或者条件表达式
例如:
- declare -i sum=0
- declare -i i=1
- while [ $i -le 5 ];do
- sum=$[$sum + $i]
- let i++
- done
- echo $sum
另外wile语句的强大的例子
while read line;do
statement
done < 文件
例如:
- while read line;do
- cut -d: -f1
- done < /etc/passwd
格式
- until 条件;do
- statement
- done
until循环的条件是当条件不满足是就循环,满足是就退出
- read -p "please input your choice:" CHOICE
- until [ "$CHOICE" = 'q' -o "$CHOICE" = 'Q' ];do
- echo "this is example"
- read -p "please input your choice:" CHOICE
- done
break 和continue常常和其他循环语句一起嵌套使用
说明:break 是直接退出循环体,而continue是退出本次循环直接进入下一次的循环。
在脚本中函数的功能为独立的实现一个功能模块。格式为
- function FUN_name {
- 函数体
- }
- 或者
- FUN_name {
- 函数体
- }
持续维护中................................