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

Shell脚本编程(上)

[复制链接]

尚未签到

发表于 2018-8-25 10:34:56 | 显示全部楼层 |阅读模式
  Shell脚本编程基础
  Shell 脚本基础:包含一些命令或声明并符合一定格式的文本文件
  Shell 脚本用途:
  1. 自动化常用命令
  2. 执行系统管理和故障排除
  3. 创建简单的应用程序
  4. 处理文本和文件
  创建Shell脚本:
  首行的固定写法:
  1. #!/bin/bash
  2. #!/bin/sh
  注:此行是告诉系统执行的时候要调用什么解释器。如果首行不写,那么执行的时候需要使用命令bash。
  脚本写法:
  注释写法:
  #!/bin/bash
  #
  #Filename:XXXX.sh        脚本文件名称
  #Description:xxxx        说明
  #Author:xxxx             作者
  #Email:xxxx@xx.xxx       联系方式
  #Revision:1.0            版本
  #Date:xxxxx              脚本创建日期
  #Note:xxxx               注解
DSC0000.png

  注:每一行之前最好有一个注释;脚本名称使用.sh结尾的尽量避免使用中文;#表示注释,此行不执行。
  脚本的执行:
  1. bash
  2. sh
  3. 加执行权限
  1) 相对路径
  2) 绝对路径
  3) 放到$PATH变量指定的目录里面,直接执行(tab)
  脚本调试执行:
  bash -n 检查语法错误,不检查拼写错误
  bash -x或sh -x 显示脚本执行的时候每一个命令具体的执行结果
  变量:暂时存放数据的地方,一个具有名称的内存地址空间。
  数据存储方式:1. 字符
  2. 数值: 整形、浮点型
  作用:1. 数据存储格式
  2. 参与的运算
  3.表示的数据范围
  类型:
  强类型(如 JAVA C#):数值型和字符型不能直接计算,除非显示把字符型转换成数值型。
  弱类型(如 shell php):不会严格区分变量类型,定义变量的时候不用指定变量类型,默认字符型,如果想要计算的时候会自动帮你转换成数值型。
  变量的命名规则:
  1.不能使用if for bash cd ls date 关键字
  2.不能以数字开头,不能使用特殊符号,只能使用数字、字母及下划线
  3.见名知意:看见名字知道此文件的意义
  4.建议变量使用大写
  bash变量的种类:
  本地变量(全局变量)  仅仅对当前shell生效
  环境变量    对当前shell以及其他shell都生效 export
  局部变量(私有变量)  生效范围位当前shell进程中某代码片段,通常用在函数里面,使用local
  本地变量:name=’value’
  可以使用引用value:
  1.可以是直接字串:name=”root”
  2.变量引用:name=”$USER”
  3.命令引用:name=COMMAND  name=$(COMMAND)
  变量引用:${name} $name
  ” ” :弱引用  会把双引号里面的变量替换
  ‘ ‘  :强引用  不会把引号里面的变量进行替换
  “ : 把反引号里面的命令执行结果赋值给变量
  显示已定义的所有变量: set
  删除变量: unset name
  注:取消变量和变量置空是两种不同概念 unset HZ
  HZ=
  环境变量:
  变量声明、赋值:
  export name=VALUE
  declare -x name=VALUE
  变量引用: $name, ${name}
  显示所有环境变量:
  env, pringtenv, export, declare -x ,set
  删除: unset name
  bash有许多内建的环境变量:
  $PATH 命令的搜寻路径
  $OLDPWD 前一个工作目录
  $LANG 目前的工作语系
  $BASH bash的完整路径名
  $BASH_VERSION Bash的版本
  $HISTCONTROL 控制指令是否存入历史文件中
  $OSTYPE 显示系统类型
  $MAIL 存放邮件的文件
  $MAILCHECK 多久检查一下邮件
  $PWD 当前路径
  $SSH_tty 当前登录的tty
  $SHLVL 当前shell在几层
  $RANDOM 随机数
  只读变量:只能声明,但不能修改和删除
  声明只读变量:readonly name
  declare -r name
  查看只读变量: readonly -p
  位置变量: 在脚本代码中调用通过命令行传递给脚本的参数
  $1,$2,…: 对应第1、第2等参数,shift [n]换位置
  $0: 命令本身
  $*: 传递给脚本的所有参数,全部参数合为一个字符串
  $@: 传递给脚本的所有参数,每个参数为独立字符串。如”$@”用「”」括起来的情况、以”$1″ “$2” … “$n” 的形式输出所有参数。
  $#: 传递给脚本的参数的个数
  注:$@、$*只在被双引号包起来的时候才会有差异
  set — 清空所有位置变量
  算数运算
  1. let num=算数表达式 let r=9+9
DSC0001.png

  2. var=$[算数表达式] r=$[9+9]
DSC0002.png

  3. var=$((算数表达式)) r=$((9+9))
DSC0003.png

  4. expr 8 + 3 (注意要有空格!!!)
DSC0004.png

  5. declare -i   r=9+9
DSC0005.png

  6. bc   计算1-100的和:echo {1..100} | tr ” ” “+” | bc
DSC0006.png

  注: expr 8 * 8 乘号需要用\转义,除号不用
  +=,  i+=3等于i=i+3
  -=,  i-=3等于i=i-3
  =,  i=3等于i=i*3
  /=,  i/=3等于i=i/3
  %=,  i%=3等于i=i%3
  i++  先执行 执行完加1 (用的比较多)
  ++i  先加1,再执行
DSC0007.png

  逻辑运算
  true 1   false 0
  1 与 1 = 1
  1 与 0 = 0
  0 与 1 = 0
  0 与 0 = 0
  1 或 1 = 1
  1 或 0 = 1
  0 或 1 = 1
  0 或 0 = 0
  与的时候 只要有一个为假 那么整个结果就是假的。
  或的时候 只要有一个为真 那么整个结果就是真。
  !1 = 0
  !0 = 1
  && 与
  || 或
  1 && 1 = 1
  1 && 0 = 0
  1 || 1 = 1
  1 || 0 = 1
  命令执行成功 我们认为是真
  命令执行失败 我们认为是假
  短路预算:
  命令1 && 命令2
  命令1 成功执行 则执行命令2
  命令1 执行失败 则不会执行命令2
  命令1 || 命令2
  命令1成功执行,则命令2不执行
  命令1执行失败,则命令2执行
  命令1 && 命令2 || 命令3
  如果命令1 成功执行 则执行命令2 且命令3不会执行
  如果命令1 执行失败 那么命令2就不会执行,则命令3执行
  如果  命令1 成功
  则    命令2;
  否则  命令3;
  退出状态
  使用$?  0代表前面一个命令执行成功
  非0 代表前面一个命令执行失败
  可以在脚本里面自定义退出状态
  根据退出状态来判断一个命令的执行成功与否
  exit [n]:自定义退出状态码
  注意:脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
  注意:如果未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一条命令的状态码
  测试条件
  test  测试条件
  [ 测试条件 ]
  [[ 测试条件 ]] 条件测试的前后要加上空格
  生产环境建议使用两个中括号
  数值测试:
  -gt: 是否大于
  -ge: 是否大于等于
  -eq: 是否等于
  -ne: 是否不等于
  -lt: 是否小于
  -le: 是否小于等于
  [[ 6 > 2 ]] && echo “OK”
  字符串测试
  == 是否等于
  >  是否大于
  <  是否小于
  != 是否不等于
  =~ 左边的字符串是否包含右边指定的字符串
  注:此表达式一般用于` `中;扩展的正则表达式
  -z 测试字符串是否为空,空为真,不空为假
  -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.yunweiku.com/thread-556288-1-1.html 上篇帖子: Linux 修改 shell 中 颜色 下篇帖子: shell中scp自动输入密码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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