设为首页 收藏本站
查看: 910|回复: 0

Shell脚本重新学习

[复制链接]

尚未签到

发表于 2018-8-21 09:16:30 | 显示全部楼层 |阅读模式
  #!/bin/bash
  
  shell的两种运行方式
  改变权限chmod u+x
  运行时指定解释器
  shell变量
  变量类型
  访问变量
  $、${}
  只读变量
  readonly
  删除变量
  unset取消变量,但不能取消只读变量
myUrl="http://lingdandan.blog.51cto.com"  
unset myUrl
  
echo $myUrl
  运行结果:
DSC0000.png

myUrl="  
readonly myUrl
  
unset myUrl
  
echo $myUrl
  运行结果:
DSC0001.png

  shell字符串
  字符串可以用单引号,也可以用双引号,也可以不用引号
  单引号
  单引号中的字符都会原样输出
  单引号中间不能有单引号(转义字符也不行)
  双引号
  双引号里面可以有变量
  单引号可以有转义字符
  字符串拼接
  LANGUAGE=English
  echo "hello ${LANGUAGE}"
  字符串长度计算  
  echo ${#VAR}
  echo ${VAR} | wc -c
  echo $TEST_SHELL_VAR | awk '{print length ($0)}'
  提取子字符串
  #*字符
  ##*字符
  %字符*
  %%字符*
   DSC0002.png
  VAR代表变量
  ${VAR:0:10}  表示从左边第一个字符开始之后的10个字符
  ${VAR:7}    表示从第七个字符开始之后的所有字符
  ${VAR:0-3:10} 表示从右边数的第三个字符开始之后的10个字符
  ${VAR:0-14}  表示从右边数的第14个字符开始之后的所有字符
   DSC0003.png
  查找字符串
  Shell数组
  数组定义
  bash只支持一维数组,不支持多维
  下标从0开始,可以是整数或者表达式
  arr=(值1 值2 值3)      圆括号   空格隔开
  也可以单独定义各个分量
  数组读取
  ${arr[下标]}
  使用@可获得数组的所有元素
DSC0004.png

  获取数组长度
  ${#arr[@]}
  ${#arr
  • }
       DSC0005.png
      
      shell传参
      脚本内获取参数的格式:$n
      $0 $1 $2
    DSC0006.png

      $*和$@都是引用所有参数,它们的区别在于$*把参数当作一个字符串,$@把参数当作一个一个的字符串
      $*  "1 2 3"     只传了一个参数
      $@  "1" "2" "3"  传来三个参数
    DSC0007.png

      shell基本运算
      原生的bash不支持简单的算术运算,可通过别的命令如awk和expr来完成
      算数运算
      + - * / % = == !=
      VAR=`expr 3 \* 5`
      关系运算符
      -eq -nq -gt -lt -ge -le
      关系运算符只支持数,不支持字符串
    DSC0008.png

      字符串运算
      =   !=   -z  -n   str
      expr  http://lingdandan.blog.51cto.com/10697032/1791485
      expr match 字符串 表达式    expr 字符串 : 表达式
      expr index 字符串 字符
      expr length 字符串
      expr substr 字符串 偏移量 长度  (偏移量从1开始)
      布尔运算
      ! -o -a
      逻辑运算符
      && ||
      文件测试运算符
      [ -f file ] -d  -b  -c  -p  -r  -w  -x  -s(文件是否大于0)  -e(目录或文件是否存在)
      shell echo命令
      1、echo "str"
      echo str
      2、echo "\"str\""
      3、echo -e "hello \nworld"      #-e开启转义    换行
      4、echo -e "hello \c"       #-e开启转义   不换行 抑制输出结果中的换行字符
      echo "world"
      5、echo "$var is good!"
      6、echo "hello world" >file
      7、echo '$var is good!'    #原样输出字符串不进行转义,使用单引号
      8、echo `date`  #显示命令结果
      
      shell printf
      默认printf不会像 echo 自动添加换行符,我们可以手动添加 \n
      语法:  printf 格式控制字符串 参数列表
      
      shell test命令
      数值测试 -eq -ne -ge -le -gt -lt
      字符串测试 = != -z -n
      文件测试 -d -f -c -b -r -w -x -e -s
      
      shell 流程控制
      if
      for
      for 变量 in 列表
      do
      done
      for var in list1 list2 list3...
      do
      command
      done
      或者写成一行for var in list1 list2;do command1;command2; done;
    DSC0009.png

      while
      until
      case
      break
      continue
      
      shell函数
      [function] func[()]
      {
      action
      [return int;]
      }
      函数返回值,可以显示的加return,如果不加将以最后一条命令的结果,作为返回值,
      return后面跟的数为0-255
      下图为加return和不加return的区别
    DSC00010.png

    DSC00011.png

      return的范围
    DSC00012.png

      函数参数
      在函数内部通过$1 $2 $3 ...${10}... 来获取参数
      $# 传递到脚本的参数个数
      $* 以一个单字符串显示所有向脚本传递的参数
      $$ 当前进程的ID
      $! 后台运行的最后一个进程ID
      $@ 和$*相同
      $- 记录当前设置的shell选项 himBH是默认值 http://kodango.com/explain-shell-default-options
      $? 获取退出码
      shell输入输出重定向
      command >file 将输出重定向到file
      command >file将输出追加到file
      n >file     将文件描述符为n的文件重定向到file
      n >>file    将文件描述符为n的文件追加到file
      n >&m      将输出文件m和n合并
      n

  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554523-1-1.html 上篇帖子: Eclipse、 pycharm、 Win7、shell常用命令 下篇帖子: 0、什么是变量,什么是shell编程
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表