脚本相关

  • 变量
    • echo $name 与 echo “$name” 假如变量是读取文件,前者会自动缩进成一行,后者保留原有格式
    • (umask=022,mkdir /f1)括号相当于开启一个临时子进程,能读取当前shall的变量等信息,但是进程号不变,命令结束后恢复刚才状态
    • 局部变量,环境变量,只读变量(常量),位置变量,数组
      • 局部变量:只在当前shall有效
      • 环境变量:可以传给子进程。
        • 设置环境变量 export 变量名 decler -x 变量名
        • 查看环境变量 export env decler -x
      • 只读变量(常量):不可更改的变量
        • 设置 decler -r 变量名 readonly 变量名
      • 位置变量
        • $n 第n个参数 ,$*所有参数当成一个字符串,$@所有参数分开传输,$#参数个数
        • $0文件名加路径 若程序建立软连接,使用软连接$0显示的是软连接路径和名字
        • $10 不是变量10,而是变量1加上0,如果想表示变量10要用{}括起来,${10}
        • set — 清除位置变量参数
        • shift 参数左移,默认是1,可以指定
      • 数组:存储多个元素的连接的内存空间
        • 组成数组名和索引(默认从0开始,也可以自定义。bash4.0以前的版本不支持自定义数组)
        • 申明数组:declare -a 通常意义的数组 -A 指关联数组
        • 数组的赋值
          • 一次只赋值一个 name[index]=value
          • 一次赋值全部 name=(value1 value2…)
          • 只赋值特定值 name=([0]=value1 [1]=value2)
          • read -a
        • 引用数组:
          • 所有元素
            • ${#name[*]]} 数组name中的参数个数
            • ${name[@ | *]} 引用所有参数
            • ${!typenum[@]}数组成员
          • 数组切片
            • ${name[@]:offset:number} offset要跳过的参数 number要取出的参数
      • bash内置字符串处理
        • 字符串切片
          • ${var:offset:number}
            • var=1234 ${var:1:2} =23
          • ${var: -n} 取字符串最右侧的几个字符 :-n前面一定要有空格
            • v=1234 ${var: -2} =34
        • 基于模式取字段
          • ${var#*word} 从左往右删除第一个word以前的字符串
          • ${var##*word} 从左往右删除最后一个word以前的字符串
          • ${var%word*} 从右往左删除第一个word以前的字符串
          • ${var%%word*} 从右往左删除最后一个word以前的字符串
        • 查找替换
          • ${var/a/b} 查找var中的a找到第一个后替换成b
          • ${var//a/b} 查找var中的a后全部替换成b
          • ${var/ # a/b} 查找var中的以行首的a找到第一个后替换成b
          • ${var/ %a/b} 查找var中的以行尾的a找到第一个后替换成b
        • 删除
          • ${var/a/} 删除var中的第一个a
        • 大小写转换
          • ${var^^} 把所有字符转为大写
          • ${var,,} 把所有字符转为小写
        • 变量临时赋值
          • ${var:-a} 如果var没有值,则给var临时赋值为a;如果var值则返回原来值
          • ${var:=a} 如果var没有值,则给var赋值为a;如果var值则返回原来值
          • ${var:+a} 如果var有值,则给var临时赋值为a;没有值则不赋值
    • 为脚本使用配置文件
      • 在脚本中使用. filename 或者source filename
  • 算术运算
    • x=10 y=20 let z=x+y ;let z++ 先处理z再加1,let ++z,先加1在处理z;let z+=1 为z+1
    • z=$[x+y] ; z=((x+y))
    • a=100 b=110 a^b=010
      • a与b的值互换 a=[a^b], b=[a^b] a=[a^b]
  • 短路与与短路或 cmd1 && cmd2 || cmd3
    • 假如cmd1成功执行cmd2,不执行cmd3,;否则相反
    • cmd1 || cmd2 && cmd3 无论cmd1是否正常,cmd3都会执行
  • 条件判断
    • test 【】
      • [[ == ]] 支持通配符 [[ =~ ]] 支持正则
    • -a并且 -o或 -z为空 -s文件存在且非空 -e文件存在(所有文件类型包括目录) -f普通文件
    • eq等于;ne不等于;lt小于;le小于等于;gt大于;ge大于等于
  • 统配符
  • read 读取输入并赋值
    • – p输入提示 -t规定结束时间 -s静默,不显示输入内容
    • 批量赋值
      • read a s d >>> x y z read a s d < f1 参数要在一行
  • if 语句
    • 单分支 : if 条件 ;then ; fi
    • 双分支: if 条件 ; then ; else ; if
    • 多分支:
  • 循环
    • while [ true ] ;do ;done [ ]进行条件判读成立进入循环,不成立则退出循环
    • until [ false ] ;do ;done 与while相反,不成立进入循环,成立退出循环
      • 特殊格式
        • while read var ;do ;done </etc/passwd var等于读取行的变量
    • for var in {} ;do ;done {}是变量var的取值范围
      • 特殊格式 for ((控制变量初始化;条件判断;控制变量修正)) ;do ;done
        • declare -i sum=0 for ((i=1;i<=100;i++));do let sum+=$i ;done
    • 循环控制语句
      • continue 【n】跳过循环 break 【n】 中断循环
        • continue 例子
          • 除了5不打印都打印
          • 打印3遍1到4。
      • case
      • select循环与菜单
        • select 变量 in values;do ;done
          • 用户输入参数在内置变量REPLY中 ;请求输入的提示符修改PS3;死循环和case组合
      • 多参数处理时偏移参数
      • 并行处理
      • 信号捕捉trap
        • trap ‘ ‘ 忽略信号 ;’-‘恢复信号;-p列出自定义信号
    • 函数:过程式编程,代码重用 ,以实现结构化编码或模块化编码
      • 语法
        • 1 fuction f_name { 代码 }
        • 2 f_name() { 代码 }
      • 函数的生命周期调用时创建,返回时终止:return命令自定义状态结果 0成功,return定于后面的命令不再执行。
      • 函数中变量如果和本地变量一样,在函数中重新申明的话不会影响本地变量;不申明的话函数中变量运算会影响本地变量。
    • 函数递归:函数直接或者间接调用自身
      • fact () {
        • if [$1 -eq 0 -o $1 -eq 1]; then
          • echo 1
        • else
          • echo $[$1*$(fact $[$1-1])
        • fi
  • ezpect 在脚本中自动与交互命令交互(基于tcl要确认安装)
    • 确认程序是否安装which tcl
    • 语法及命令:
      • spawn:启动的新进程;interact:允许交互;exp_continue:匹配多个字符后加此命令
      • send:像进程发送的字符串;expect:从进程接受到的字符串
        • 单分支: expect “hi”{send “good\n”} 匹配到hi的时候输入
        • 多分支:expect “hi”{send “good\n”}\
          • ”hehe“ {send “good\n”}
        • eval 扫描命令进行置换
          • cs=whoami ; eaval $csroot

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98471

发表评论

登录后才能评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班