bash编程要点变量:
本地变量:只对当前shell进程有效,对当前shell之外的其它shell(包括其父、子等)无效;
环境变量:对当shell进程及其子shell进程有效;
局部变量:仅在当前shell进程中的某段代码空间内有效;通常用于函数本地程序;
位置变量:$1, $2, ... $1 是传递给该shell脚本的第一个参数 $2 是传递给该shell脚本的第二个参数…
特殊变量:
$# 是传给脚本的参数个数 $0 是脚本本身的名字 $@ 是传给脚本的所有参数的列表 $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过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之内的所有偶数的和 1
2
3
4
5
6
| #!/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编程风格: 1
2
3
4
| for((变量赋值;循环条件;修正表达式)); do
CMD1
CMD2
done
|
(3) 循环嵌套:外层循环执行一次,内层循环执行完毕之后再开始执行外层循环,外层循环执行一次,内层循环可能执行多次。 1
2
3
4
5
6
7
| fori in [LIST1]; do
CMD1
forj in [LIST2]; do
CMD2
...
done
done
|
for循环进阶实例
打印99乘法表 1
2
3
4
5
6
7
8
| #!/bin/bash
for i in {1..9};do
for j in `seq $i`;do
num=$[$i*$j]
echo -e -n "$[j]x$=$num "
done
echo
done
|
|