bash编程要点
变量:
本地变量:只对当前shell进程有效,对当前shell之外的其它shell(包括其父、子等)无效;
环境变量:对当shell进程及其子shell进程有效;
局部变量:仅在当前shell进程中的某段代码空间内有效;通常用于函数本地程序;
位置变量:$1, $2, ...
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数…
特殊变量:
$# 是传给脚本的参数个数
$0 是脚本本身的名字
[email protected] 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示执行成功,其他表示执行失败。
变量的引用
${变量名}:{}可以省略,简写为$变量名
引号在变量引用中的作用
“”:双引号,弱引用,会显示变量所表示的值;
‘’:单引号,强引用,显示引号内的内容,不会显示变量的值;
a=1; echo ‘$a’的结果则为$a
``:反引号,命令引用,命令替换,会将引号中命令的执行结果引用;作用同$(COMMAND)
a=`echo1`,echo $a;结果则为1,将echo 1的结果赋值给a,即a=1
声明变量
整形变量的声明:
let VAR_NAME=VALUE
declare-i VAR_NAME=VALUE
环境变量的声明:
exportVAR_NAME=VALUE
declare-x VAR_NAME=VALUE
脚本的格式:
第一行写明解释器,即这个脚本运行是用哪个解释器来解释,例如#!/bin/bash,则使用bash来解释脚本运行,必须第一行顶格写。
其他以#号开头的行均为解释,解释器会自动略过,不会执行
脚本的运行
使用chmod +x 脚本名 赋予脚本执行权限,指明路径运行
直接传递脚本给bash解释器运行,其中
-n:测试脚本中是否有语法错误
-x:将脚本执行的每一步都显示到终端上,以便调试脚本
脚本中的算数运算
$[算数运算式]
let脚本名=算数运算式
$((算数运算式))
$(exprargu1 argu2 argu3)
脚本的流程控制
for循环:
格式:
for 变量 in 列表 ;do
循环体
done
变量在列表中依次取值并将值带进循环体中,列表中的值取尽,则循环执行完毕,循环次数即是列表中值的个数。
列表:包含至少一个元素的字符串集合
(1) 直接给出
(2) 数值列表:{start..end}, 例如:{1..10}
seq LAST:从1到LAST,每隔1取一个值,{seq 3} 表示{1,2,3}
seq FIRST LAST:从FIRST到LAST,每隔1取一个值
seq FIRST STEP LAST:从FIRST到LAST,每隔STEP取一个值;{seq 2 2 10}表示{2,4,6,8,10}
(3) 可用是命令执行结果的列表,使用反引号。
for循环实例
计算1-100之内的所有偶数的和
#!/bin/bash declare -i sum=0 for i in `seq 2 2 100`;do sum=$[$sum+$i] done echo $sum
for循环的特殊情况
(1)for省略,会自动获取脚本参数列表;
(2)C编程风格:
for((变量赋值;循环条件;修正表达式)); do CMD1 CMD2 done
(3) 循环嵌套:外层循环执行一次,内层循环执行完毕之后再开始执行外层循环,外层循环执行一次,内层循环可能执行多次。
fori in [LIST1]; do CMD1 forj in [LIST2]; do CMD2 ... done done
for循环进阶实例
打印99乘法表
#!/bin/bash for i in {1..9};do for j in `seq $i`;do num=$[$i*$j] echo -e -n "$[j]x$[i]=$num\t" done echo done