shell编程基础(3)

版权声明:原创文章,转载请附加链接。 https://blog.csdn.net/qq_36749611/article/details/87463099

shell 条件测试和控制结构及shell函数

shell 条件测试

  1. test测试命令
    语法:test 表达式

  2. 测试文件属性
    -b file:如果文件file存在且为块设备,则值为真
    -c file:如果文件file存在且字符设备,则值为真
    -r file:如果文件file存在且为只读,则值为真
    -w file:如果文件file存在且可写入,则值为真
    -x file:如果文件file存在且可执行,则值为真
    -s file:如果文件file存在且长度大于0,则值为真
    -d file:如果file是一个目录,则值为真
    -f file:如果文件file是一个普通文件,则值为真
    -e file:如果文件file存在,则值为真

  3. 测试数值
    n1 -eq n2(等于)
    n1 -ne n2(不等于)
    n1 -gt n2(大于)
    n1 -lt n2(小于)
    n1 -ge n2(大于等于)
    n1 -le n2(小于等于)

  4. 测试字符串
    -z s1判断长度是否为0,为0返回真
    -z s1判断长度是否为0,不为0返回真
    s1 !=s2,s1=s2 判断是否相等
    s1 如果不是空串,返回真

  5. 测试逻辑运输符
    -a 与
    -o 或
    !非

shell控制结构

  1. if结构
if 表达式
then 命令表
[else 命令表]
fi
1.fi表示if结束
2.命令表表示一条或若干条命令
3.elif可以理解为else if
  1. case结构
case 表达式 in
  模式11[12]...) 命令表1;;
  模式21[22]...) 命令表2;;
  模式31[32]...) 命令表3;;
  ...
  *)命令表n;;
  esac
  1.模式必须以)结尾
  2.分支必须以;;结尾
  3.*)表示缺省处理
  4.esac表示case结束
  5.模式中可以使用shell通配符,可以使用|(或关系)
  1. select结构
select 变量 in 列表
do
  命令表
done
1.select结构是一种循环结构,需要使用break命令退出循环,也可以使用exit命令结束脚本
2.done表示循环结束
3.select通常与case语句一起使用
  1. while循环
while(表达式)
do
  命令表
done
  1. for循环
for 变量 [in 列表]
do
  命令表
done
1.for根据列表确定循环次数
2.for 变量 隐含表示 for 变量 $@
  1. until循环
until
  命令表1
test 表达式
do
 命令表2
done
1.直到型循环
2.命令表1在循环开始前执行,且在每一次循环结束后,再次执行
3.循环体为命令表2
  1. break和continue
  • break语句可以结束while,for,until,select等结构执行,跳出循环,转到done语句后继续执行
  • continue 结束本次循环中剩余代码,开始下一轮循环

shell函数

  1. 函数定义
[function] 函数名
{
  命令表
  [return]
}
  • 关键字function表示定义一个函数,可以省略,其后是函数名,有时函数名后会有一对空括号,但非必须
  • { 表示函数开始,} 表示函数结束
  • return用于返回最后一个命令的退出状态或给定的参数值
  • 使用exit退出整个脚本,函数退出后返回到调用该函数的地方
  • 可以使用break语句中断函数执行
  • 使用内部命令declare -f 可以显示定义的函数清单,declare -F只显示函数名
  • 使用export -f 将函数输出给shell
  • 使用unset -f 从shell内存中删除函数
  1. 函数的调用
  • 函数执行前必须被定义
  • 执行函数,输入函数名即可
  • 使用命令定义的函数在用户注销时将自动删除,如果需要函数总是有效,可以将函数定义放在~/.bash_profile中。然后使用.或source执行.bash_profile文件,使其生效
  • 函数通过位置变量传递参数,参数位置定义:$函数名 参数1 参数2 参数3 …
  • 程序执行到return之后,函数就停止执行,返回到主程序执行,return返回0-256之间一个整数,返回值保存在变量$?中。可以给return指定返回值,没有指定时返回最后一个命令退出状态。
  • 使用source命令或.命令可以把函数装入内存中。如:source 文件名
  • 从内存中删除函数,语法:unset -f 函数名
  1. 函数作用域
  • 全局作用域
    没有使用关键字local进行特别的声明变量都具有全局作用域,可以在程序任何地方访问。
  • 局部作用域
    使用loal修饰即可,该类变量超出区域即被销毁
  • 当全局变量与局部变量重名时,按就近原则处理
  1. 函数嵌套:在函数中定义并调用其他函数
  2. 函数递归:用自己的定义说明自己

猜你喜欢

转载自blog.csdn.net/qq_36749611/article/details/87463099
今日推荐