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

Linux Shell基础学习(一)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2018-8-29 12:37:24 | 显示全部楼层 |阅读模式
  shell脚本是什么呢?简单来说,它就是许多命令的一个集合;Shell脚本是一个面向过程的编程语言,它是通过解释器来解释运行脚本里的每一条命令;
  面向过程的编程语言的元素:变量、数组、流程、函数
  下面就来学习一下Shell脚本吧!
  一.变量      
  变量:可以理解它为一个命名的内存空间,里面的数据是可变的
  1.变量命名法则:
  (1).只能使用数字、字母或下划线,而且不能以数字开头
  (2).不能使用系统中的关键字:比如if,elif,fi,then,for...等
  (3).见名知义
  2.变量类型
  (1).本地变量:只对当前Shell进程有效,对当前shell之外的其它shell(包括其父shell,子shell等)都无效
  (2).环境变量:对当前shell进程及子shell进程有效
  (3).局部变量:仅在当前shell进程中的某段代码空间内有效,通常用于函数内的变量
  (4).位置变量:表示参数在传递过程中所在的位置,比如:$0表示shell脚本自身,$1表示第一个参数,$2表示第三个参数……
  (5).特殊变量:表示特殊作用的变量,比如:$?表示上一个命令执行成功与否的状态值,$#表示参数个数,$@和$*表示所有参数的集合
  3.声明变量并赋值
  (1).本地变量
  无须声明,直接赋值即可被调用
  VAR_NAME=VALUE
DSC0000.jpg

  (2).环境变量
  export VAR_NAME=VALUE或declare -x VAR_NAME=VALUE
DSC0001.jpg

DSC0002.jpg

  可以使用以下命令查看当前shell中的环境变量:
  env
  export
  printenv
  (3).局部变量
  local VAR_NAME=VALUE
  (4).只读变量
  readonly VAR_NAME=VALUE或declare -r VAR_NAME=VALUE
DSC0003.jpg

  只读变量一旦被赋值后,不能再次被赋值
  (5)整型变量
  let VAR_NAME=VALUE或declare -i VAR_NAME=VALUE
DSC0004.jpg

  注:查看当前已定义的所有变量可以用以下命令:
  set
DSC0005.jpg

  略……
  (6)几个高级的变量赋值:
  ${var:-word}:表示如果var为空或未设置,那么返回word;否则,则返回
DSC0006.jpg

  ${var:=word}:表示如果var为空或未设置,那么返回Word;并且将word赋值给var;否则返回var中的值
DSC0007.jpg

  ${var:?err_info}:表示如果Var为空或未设置,那么返回错误 信息err_info;否则,则返回Var自身的值
DSC0008.jpg

  ${var:+word}:表示如果var变量已设置,则返回word;否则,返回var值
DSC0009.jpg

  4.变量引用
  ${VAR_NAME}
DSC00010.jpg

  5.变量撤消
  unset VAR_NAME
DSC00011.jpg

  注:环境变量不能被撤消
DSC00012.jpg

  二.数组
  数组:是一个连续的多个独立的内存空间,每个内存空间相当于一个变量,只是将许多变量组合起来形成一个集合
  1.数组声明
  declare -a ARRAR_NAME
DSC00013.jpg

  2.数组元素
  数组元素即是数组集合中的一个个成员,每个成员都是由数组名加索引编号组成,编号从0开始,比如:array[0],array[1]……
  3.数组赋值
  (1)一次只赋值一个元素
  ARRAY[index]=VALUE
DSC00014.jpg

  (2)一次赋值全部元素
  ARRAY_NAME=("red" "black" "white")
DSC00015.jpg

  (3)指定索引号进行赋值
  ARRAY=([0]="red" [1]="black" [3]="white")
  (4)交互式赋值
  read -a ARRAY_NAME
DSC00016.jpg

  4.引用数组元素
  (1)指定元素编号
  ${ARRAY[index]}
DSC00017.jpg

  (2)获取全部元素值
  ${ARRAY
  • }或${ARRAY[@]}
    DSC00018.jpg

      (3)数组元数个数:
      ${#ARRAY
  • }或${#ARRAY[@]}
    DSC00019.jpg

      (4)指定元素偏移值获取元素值
      ${ARRAY[@]:offset:number}
      例如,对于数组a2偏移一个,取后面两个:
    DSC00020.jpg

      (5)向数组中追加一个元素
      ARRAR[${#ARRAR[@]}]
      例如,向a2数组中添加一个元素:
    DSC00021.jpg

      三.字符串
      (1).字符串切片
      ${var:offset:lenth} :对Var字串偏移取出字符
    DSC00022.jpg

      ${var: -lenth}:取出var字串最后的几个字符,注:冒号之后要有空格
    DSC00023.jpg

      (2).基于模式切割字符串
      ${var#*word}:word可以是指定的任意字符,表示自左而右,查找var变量,删除从首字符至首次出现与word匹配的字符之间的所有字符
    DSC00024.jpg

      ${var##*word}:word可以是指定的任意字符,表示自左而右查找Var变量,删除从首字符至最后一次出现与Word匹配的字符之间的所有字符
    DSC00025.jpg

      ${var%word*}:word可以是指定的任意字符,表示自右而左查找,删除最后一个字符至首次匹配到的字符之间的所有字符
    DSC00026.jpg

      ${var%%word*}:word可以是指定的任意字符,表示自右而左查找,删除最后一个字符至最后一次匹配到的字符之间的所有字符
    DSC00027.jpg

      (3)查找并替换
      ${var/pattern/substi}:查找var所表示的字串中,第一次被pattern匹配到的字串,并以substi替换之
    DSC00028.jpg

      ${var//pattern/substi}:查找Var所表示的字串中,全局替换
    DSC00029.jpg

      ${var/#pattern/substi}:行首锚定查找并替换
    DSC00030.jpg

      ${var/%pattern/substi}:行尾锚定查找并替换
    DSC00031.jpg

      (4)查找并删除
      ${var/pattern}:删除第一次被pattern匹配到字符
    DSC00032.jpg

      ${var//pattern}:全局匹配并删除
    DSC00033.jpg

      ${var/#pattern}:行首匹配并删除
    DSC00034.jpg

      ${var/%pattern}:行尾匹配并删除
      (5)字符串大小写转换
      var=VALUE
      ${var^^} :所有小写字符转换成大写字符
    DSC00035.jpg

      var=VALUE
      ${var,,}:所有大写字符转换成小写字符


  • 运维网声明 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.yunweiku.com/thread-558174-1-1.html 上篇帖子: 跟散仙学shell命令(三) 下篇帖子: shell 产生随机数的多种方法
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

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

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

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

    扫描微信二维码查看详情

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


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


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


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



    合作伙伴: 青云cloud

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