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

shell编程的语法知识点

[复制链接]

尚未签到

发表于 2018-8-30 06:33:30 | 显示全部楼层 |阅读模式
  本节我们一起来看一下shell的编程,可能讲的不是非常全,希望大家可以一起讨论补充。
  我将根据以下几个步骤对shell的编程语法进行讲解:
  u 脚本简单介绍
  u 变量
  u 算术运算
  u 交互式编程
  u 选择判断
  u 条件测试
  u 循环
  u 函数
  脚本简单介绍
  在讲这些语法格式之前我们先对脚本进行简单的了解。
  1、书写格式
  第一行,顶格:以下为例
#!/bin/bash  
#!/usr/bin/python
  上边2个是两种不同编程语言的开头,一个是bash,一个是python,使用哪种语言开头这里就用哪种语言。
  其它的以#开头的行均为注释,会被解释器忽略。
  2、执行与检测
Bash  [option]   file  -n: 语法测试
#bash -n ping.sh    即对ping.sh进行语法检测,如不报错,则语法真确  -x: 模拟单步执行
#bash -x  ping.sh  可以显示该脚本执行中的每个步骤  变量
  变量定义规则:
  1、不能使用程序中的关键字(保留字)
  2、变量名只能包含字母、数字、下划线,且不能以数字开始
  3、最好做到见名知意
  bash变量类别:
  1、本地变量:对整个脚本进程或整个bash进程有效。
  2、环境变量:当前shell进程及其子进程。
  3、局部变量:只对当前的代码段有效。
  4、位置变量:$n即为第n个位置变量      $1, ..., $n, ${10}
  5、特殊变量:bash内置的变量
  $?:上一个命令执行的返回值
  $#: 传递给脚本参数的个数
  $*
  $@:引用传递给脚本的所有参数
  变量的赋值
  格式:变量名=值
  VARNAME=VALUE
  变量引用:${VAR_NAME}
  双引号"":  弱引用,里面的变量会被替换;
  单引号'' :  强引用,里面的所有字符都是字面量,直接输出;
  变量的撤销:unset VAR_NAME
  算术运算
  算术运算:bash会对数字执行隐式的类型转换
  let VAR_NAME=Integer_Value
  declare -i Var_Name=Integer_Value
  注意:即使没有定义为整型变量,字符型的数字依然可以参与算术运算;bash会执行变量类型的隐式类型转换;
  运算操作符:+, -, *, /, %(取模), **(次方)
  bash的算术运算的方式:
  let Var_Name=EXPRESSION
  例如
DSC0000.jpg

  $[EXPRESSION]
  例如
DSC0001.jpg

  $((EXPRESSION))
  例如
DSC0002.jpg

  命令:expr ARG1 OP ARG2
  例如
DSC0003.jpg

  交互式编程
  格式:read option “交互时的提示信息” 参数(交互时输入的值)
  option:
  -p :直接指定一个变量接受参数
  -t :timeout ,指定等待接受参数的时间
  下面我们来一个简单示例:创建一个脚本
#!/bin/bash  
#
  
read -p "Please input a user :" us
  
echo $us
  执行该脚本:会出现交互,我输入了一个hello.
[root@mwj87v5 scripts]# bash test5.sh  
Please input a user :hello
  
hello
  选择判断
  if语句
  (1)单分支的if语句:
  if 测试条件; then
  选择分支
  fi
  表示条件测试状态返回值为值,则执行选择分支;
  (2)双分支的if语句:
  if 测试条件; then
  选择分支1
  else
  选择分支2
  fi
  两个分支仅执行其中之一。
  练习:通过命令行给定一个文件路径,而后判断:
  如果此文件中存在空白行,则显示其空白行的总数;
  否则,则显示无空白行;
DSC0004.jpg

  我们对/etc/fstab文件进行测试
DSC0005.jpg

  注意:如果把命令执行成功与否当作条件,则if语句后必须只跟命令本身,而不能引用。
  (3)分支的if语句:
  if 条件1; then
  分支1
  elif 条件2; then
  分支2
  elif 条件3; then
  分支3
  ...
  else
  分支n
  fi
  练习:传:递一个用户名给脚本
  如果此用户的id号为0,则显示说这是管理员
  如果此用户的id号大于等于500,则显示说这是普通用户
  否则,则说这是系统用户;
DSC0006.jpg

  case语句
  当有多个测试条件时,case语句会使得语法结构更明晰
  用法格式:
  case 变量引用 in
  PATTERN1)
  分支1
  ;;
  PATTERN2)
  分支2
  ;;
  ...
  *)
  分支n
  ;;
  esac
  PATTERN:类同于文件名通配机制,但支持使用|表示或者;
  a|b: a或者b
  *:匹配任意长度的任意字符
  ?: 匹配任意单个字符
  []: 指定范围内的任意单个字符
  例如:用户键入字符后判断其所属的类别;
DSC0007.jpg

  条件测试
  条件测试根据比较时的操作数的类型可以分为以下3类:
  整型测试:整数比较
  字符测试:字符串比较
  文件测试:判断文件的存在性及属性
  整型测试
  格式:[ $num1 比较符 $num2 ]
  比较符
-gt大于-lt小于-ge大于等于-le小于等于-eq等于-ne不等于  字符串测试
  格式:[[ "$str1" 比较符 "$str2" ]]
  比较符:
  双目
  >
  <
  >=
  

运维网声明 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-558574-1-1.html 上篇帖子: shell脚本学习笔记系列--1 下篇帖子: 怎么在文件中每行后面添加行数号(shell命令)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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