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

shell 编程基础

[复制链接]

尚未签到

发表于 2015-12-3 13:58:53 | 显示全部楼层 |阅读模式
  1 创建shell脚本文件
  要创建一个shell脚本文件,必须在第一行指定要使用的shell,其格式为:
  #! /bin/bash
  接着加上该shell文件的注释,说明该脚本文件用来干什么,有谁创建,什么时候创建,如下:



#! /bin/bash
# function : This script displays the date and who’s logged in
# author : benxintuzi
# date : 2015-07-12
date
who
  将上述内容保存为01.sh,存放到如下目录中:
  /root/shell
  执行01,出现bash: 01: command not found这是因为shell找不到01.sh所在的位置;
  执行./01,出现bash: ./01.sh: Permission denied这是因为当前用户对01.sh没有执行权限,运行ls –l 01.sh,得到-rw-r--r--. 1 root root 128 Jul 12 00:22 01.sh。那么就需要我们改变当前用户对于01.sh的权限:chmod u+x 01.sh,然后执行./01.sh:
   DSC0000.png
  
  2 echo的使用
  echo用于向显示器输出信息,默认情况下不需要使用引号将显示的文本括起来,如:
   DSC0001.png
  但是如果即将显示的文本中使用了引号的话,需要用另一种引号将整个文本内容包含起来,如:
   DSC0002.png
  
  3 变量的使用
  3.1 环境变量
  环境变量用于记录系统相关信息,可以用set命令来显示一份完整的环境变量列表:
   DSC0003.png
  要使用环境变量VARIABLE,只需在shell脚本文件中如下使用:”${VARIABLE}”。
  
  3.2 用户变量
  用户变量名使用字母、数字、下划线构成的字符串,字符数量不超过20个,并且命名是大小写敏感的。变量定义格式如下:
  NAME="benxintuzi"
  ID=0001
  注意:变量赋值时等号=两端不能有空格,如下所示:



NAME= "benxintuzi"
echo My name is: ${NAME}.
   DSC0004.png
  shell脚本可以根据变量值自动判断变量类型。
  
  3.3 反引号
  这是一个特殊的符号,一般在shell脚本之外很少用到它,与~位于同一个键上的符号。其作用是可以将shell命令执行的结果赋给一个变量,如下:
   DSC0005.png
  
  4 输入/输出重定向
  4.1 输出重定向
  将shell命令执行结果输出到文件中,bash shell采用>来完成,格式如下:
  command > outputfile
   DSC0006.png
  但是>会覆盖文件中已有的数据,可以使用>>来向文件中追加数据。
   DSC0007.png
  
  4.2 输入重定向
  输入重定向将文件的内容重定向到shell命令中,使用<来完成,比如使用wc命令计算一个文本的行数、词数、字节数:
   DSC0008.png
  表示dlog文本一共有4行,21个词,总共194个字节。
  还有一种称为内联输入重定向的方法,可以使用命令行输入作为重定向输入,使用<<来完成,但是必须指定输入开始和结束的标志字符串。例如使用wc计算输入的三行数据,使用BT作为输入分界符,格式如下:
  command << marker
  # input data
  marker
   DSC0009.png
  表示输入数据共有3行,一共8个词,占用53个字节。
  
  5 管道
  将前一个命令的输出重定向到后一个命令的输入中,这个过程称为管道连接(piping)。
  管道使用|表示,格式如下:
  command1 | command2
  
  6 数学运算

  expr(Bourne   shell提供)

  ARG1 | ARG2

  如果存在0或null,返回ARG2;否则返回ARG1

  ARG1 & ARG2

  如果存在0或null,返回0;否则返回ARG1

  ARG1 < ARG2

  如果ARG1小于ARG2,返回1;否则返回0

  ARG1 > ARG2

  如果ARG1大于ARG2,返回1;否则返回0

  ARG1 = ARG2

  如果ARG1等于ARG2,返回1;否则返回0

  ARG1 != ARG2

  如果ARG1不等于ARG2,返回1;否则返回0

  ARG1 <= ARG2

  如果ARG1小于或等于ARG2,返回1;否则返回0

  ARG1 >= ARG2

  如果ARG1大于或等于ARG2,返回1;否则返回0

  ARG1 + ARG2

  加法运算

  ARG1 – ARG2

  减法运算

  ARG1 * ARG2

  乘法运算

  ARG1 / ARG2

  除法运算

  ARG1 % ARG2

  取余运算

  STRING : REGEXP

  如果STRING中存在REGEXP的匹配,返回该匹配

  match STRING REGEXP

  如果STRING中存在REGEXP的匹配,返回该匹配

  substr STRING POS LENGTH

  返回从POS开始,长度为LENGTH的子字符串

  index STRING CHARS

  返回STRING中CHARS的位置

  length STRING

  返回字符串STRING的长度

  +TOKEN

  将TOKEN解释为字符串,即使是个关键字

  (EXPRESSION)

  返回EXPRESSION的值

  

  

  方括号$[operation](bash shell,为了与Bourne   shell兼容,也包含了expr命令)

  比如:



var1=$[1 + 5]
echo $var1
6
  

  

  注:bash shell运算符只支持整数运算。

  

  

  

  浮点数运算

  bc

  bash计算器可以识别数字、变量、注释、表达式、程序块、函数等。
  使用时输入bc,按下回车,然后输入表达式,就可以执行计算了;退出时,输入quit。
  浮点数的精度由变量scale控制,比如在bash计算器中设置scale=4,那么3/4 =   .7500。scale变量的默认值为0。

  
  7 退出脚本
  shell中运行的每个命令运行结束后都返回exit status,是一个0~255之间的整数值。Linux使用变量$?来保存前个命令的退出状态码。

  状态码

  描述

  0

  命令成功结束

  1

  通用未知错误

  2

  误用shell命令

  126

  没有执行该命令的权限

  127

  没有找到命令

  128

  无效退出参数

  128+x

  Linux信号x的严重错误

  130

  命令通过Ctrl+C终止

  255

  退出状态码越界

  默认情况下,shell脚本返回脚本中最后一个命令的退出状态码。当然可以自定义一个退出状态码,用exit命令返回,比如:exit 5。如果退出状态码指定值大于255,那么shell将执行256运算后返回。
  

运维网声明 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-146860-1-1.html 上篇帖子: python manage.py shell之后的一些错误: 下篇帖子: iOS 批量打包--Shell脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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