鸟书shell学习(三)shell脚本程序设计要点总结
一 注意事项
1.脚本的开头一行为 :
#!/bin/bash声明这个脚本需要的shell的名称
2.程序中出了"#!"之外的其他以#开头的都是注释内容
3.为了方面的使用系统命令,可以在程序的开始部分设置主要环境变量例如PATH
4.脚本程序的运行方法:
- sh example.sh 或者类似 bash example.sh
- chmod +x example.sh ; ./example.sh ################################ 这两种执行方式都是在新建的子进程中完成的
- source example.sh 或者 . example.sh 则是在父进程中直接执行命令的
二 简单脚本
2.1 交互式脚本,处理简单的输入输出
read -p ‘please input your first name: ‘ firstname首先是读取用户输入的read命令,输出的命令就是echo ,例如:
echo ‘your first name is : $firstname‘
除了这种方式之外就是通过执行脚本时的参数的传递,在shell中参数名是内置的$0,$1,$2,$4...这里$0表示文件名,$1开始表示第一个参数,其他依次类推. 初次之外还有其他特殊的参数名,如下:
- $# : 表示参数个数
- $@:代表"$1","$2" ... 之意
- $*:代表"$1 $2 $3 ..." 之意
eg:
#!/bin/bash echo 'filename:'$0 echo 'args size: '$# echo 'first arg:'$1
2.2 数值运算
1).declare - i var 可以将变量声明为整数,然后对变量进行运算,变量运算是这样的:$((计算式)) eg:
declare -i v1 declare -i v2 v3=$(($v1 + $v2)) #也可以这样计算: declare -i v3=$v1*$v2 #表达式之间不能有空格2).var=$((运算内容)) //运算内容中间是允许有空格的 eg:
echo $ (( 19 + 78))
2.3 shell中的判断式
shell中可以用test命令进行判断,eg:
test -e ./example.sh #测试文件是否存在
常见测试类型和参数如下:截图来自鸟哥的Linux私房菜
除了可以用test命令进行条件判断之外i,还可以用[] (中括号的语法进行判断,判断测试参数和test一样).
[]语法要求[]内的所有量之间均有空格,eg:
[b"$name"b==b"xiaoyi"b] #b都表示空格
三 复杂脚本
3.1 条件语句
if else 的标准格式:if [ 条件判断1 ] ; then command1 elif [ 条件判断2 ] ; then command2 else command3 fi其中,条件可以用&&或者||进行连接
case...esac的标准格式如下:
case $variableName in "第一个变量内容") 程序段 ;; #每个类型的结尾类似break "第二个变量内容") 程序段 ;; *)# 类似default 用* 代替 其他不符合条件的程序段 ;; esac
3.2 循环语句
循环的几种格式如下:- while do done
while [ condition ] do 程序段 done
- until do done
until [ condition ] do 程序段 done
- for...do...done
for var in cond1 cond2 cond3 ... do 程序段 done for ((初始值;限制值;执行步长)) do 程序段 done
3.3 函数
function fname(){ 程序段 }examples:
#!/bin/bash # if --- else -- exmaple declare -i v1=10 declare -i v2=15 if [ $v1 -ge $v2 ] ; then echo ''$v1' is bigger than '$v2'' else echo ''$v1' is smaller than '$v2'' fi # case ... esac example read -p 'Please input your name : ' name case $name in "xiaoyi") echo 'hello xiaoyi' ;; "xiaoyi1") echo 'hello xiaoyi1' ;; *) echo 'no case matched!' ;; esac # loop example declare lv=1 while [ $lv -le 10 ] do echo $lv lv=$((${lv}+1)) done until [ $lv -le 1 ] do echo $lv lv=$((${lv}-1)) done for c in 'c1' 'c2' 'c3' do echo $c done for ((i=0;i<10;i=i+1)) do echo $i done function printHello(){ echo 'hello' } printHello
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。