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

linux下shell编程基础

[复制链接]

尚未签到

发表于 2018-8-29 06:23:05 | 显示全部楼层 |阅读模式
  shell中最基础的东西像history,文件/数字等测试,如何执行一个脚本等,这次主要是介绍一些稍微深入的内容。
  比如test测试,if条件语句,for循环,while循环,case语句,自定义函数等,希望对大家有帮助,大家多提意见。。。。。
  
  一.条件测试操作
  1. test命令
DSC0000.gif 用途:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值

DSC0001.gif 格式:test 条件表达式

  [ 条件表达式 ]
  常见的测试类型 : 测试文件状态 字符串比较 整数值比较 逻辑测试
  1) 测试文件状态
DSC0002.gif 格式:[ 操作符 文件或目录 ]

  c.常用的测试操作符
DSC0003.gif -d:测试是否为目录(Directory

DSC0004.gif -e:测试目录或文件是否存在(Exist

DSC0005.gif -f:测试是否为文件(File

DSC0006.gif -r:测试当前用户是否有权限读取(Read

DSC0007.gif -w:测试当前用户是否有权限写入(Write

DSC0008.gif -x:测试当前用户是否可执行(Excute)该文件

DSC0009.gif -L:测试是否为符号连接(Link)文件

  [ -e /etc/sysconfig/ ] && echo "yes"
  2) 整数值比较
DSC00010.gif 格式:[ 整数1 操作符 整数2 ]

  常用的测试操作符
DSC00011.gif -eq:等于(Equal

DSC00012.gif -ne:不等于(Not Equal

DSC00013.gif -gt:大于(Greater Than

DSC00014.gif -lt:小于(Lesser Than

DSC00015.gif -le:小于或等于(Lesser or Equal

DSC00016.gif -ge:大于或等于(Greater or Equal

  3) 字符串比较
DSC00017.gif 格式:[ 字符串1 = 字符串2 ]

  [ 字符串1 != 字符串2 ]
  [ -z 字符串 ]
DSC00018.gif 常用的测试操作符

DSC00019.gif =:字符串内容相同

DSC00020.gif !=:字符串内容不同,! 号表示相反的意思

DSC00021.gif -z:字符串内容为空

  4) 逻辑测试
  a) 格式:[ 表达式1 ] 操作符 [ 表达式2 ] ...
  常用的测试操作符
DSC00022.gif -a或&&:逻辑与,“而且”的意思

  p 前后两个表达式都成立时整个测试结果才为真,否则为假
DSC00023.gif -o或||:逻辑或,“或者”的意思

  二.if条件语句
  1.单分支:
  如果/boot分区的空间使用超过80%,输出报警信息
  #!/bin/bash
  RATE=`df -hT | grep "/boot" | awk '{print $6}' | cut -d "%" -f1 `
  if [ $RATE -gt 80 ]
  then
  echo "Warning,DISK is full!"
  fi
  2. 双分支
  当“条件成立”、“条件不成立”时执行不同操作
DSC00024.gif 例子:判断sshd是否在运行,若已运行则输出提示信息,否则重新启动sshd服务

  #!/bin/bash
  service sshd status &> /dev/null
  if [ $? -eq 0 ]
  then
  echo "mysqld service is running."
  else
  /etc/init.d/sshd restart
  fi
  3. 多分支
  三.for循环语句
  根据变量的不同取值,重复执行一组命令操作
  例子1:依次输出3条文字信息,包括一天中的“Morning”、“Noon”、“Evening”字串
  #!/bin/bash
  for TM in "Morning" "Noon" "Evening"
  do
  echo "The $TM of the day."
  done
  例子2
  #!/bin/bash
  DIR="/opt"
  LMT=100
  ValidUsers=`grep "/bin/bash" /etc/passwd | cut -d ":" -f 1`
  for UserName in $ValidUsers
  do
  Num=`find $DIR -user $UserName | wc -l`
  if [ $Num -gt $LMT ] ; then
  echo "$UserName have $Num files."
  fi
  done
  四.while循环语句
DSC00025.gif 应用示例1

DSC00026.gif 批量添加20个系统用户帐号, 用户名依次为“stu1”、“stu2”、……、“stu20”

  #!/bin/bash
  i=1
  while [ $i -le 20 ]
  do
  useradd stu$i
  echo "123456" | passwd --stdin stu$i &> /dev/null
  i=`expr $i + 1`
  done
DSC00027.gif 应用示例2:删除刚建立的20个帐户

  #!/bin/bash
  i=1
  while [ $i -le 20 ]
  do
  userdel -r stu$i
  i=`expr $i + 1`
  done
  五.case多重分支语句
  根据变量的不同取值,分别执行不同的命令操作
  #!/bin/bash
  echo -n "please inset some keys:"
  read AA
  case $AA in
  [a-z]|[A-Z])
  echo "they are letters"
  ;;
  [0-9])
  echo "they are number"
  ;;
  *)
  echo "they are other words"
  ;;
  esac
  六.until循环语句
  until语句根据条件执行重复操作,与while循环正好相反
  七.shift迁移语句
  用于迁移位置变量,将 $1~$9 依次向左传递
DSC00028.gif 例如,若当前脚本程序获得的位置变量如下:

  p $1=file1、$2=file2、$3=file3、$4=file4
DSC00029.gif 则执行一次shift命令后,各位置变量为:

  p $1=file2、$2=file3、$3=file4
DSC00030.gif 再次执行shift命令后,各位置变量为:

  p $1=file3、$2=file4
  #!/bin/bash
  Result=0
  while [ $# -gt 0 ]
  do
  Result=`expr $Result + $1`
  shift
  done
  echo "The sum is : $Result"
  八.循环控制语句
  1. break语句for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句
  2. continuefor、while、until等循环语句中,用于跳过循环体内余下的语句,重新判断条件以便执行下一次循环
  九.Shell函数应用
  Shell函数概述
DSC00031.gif 在编写Shell脚本程序时,将一些需要重复使用的命令操作,定义为公共使用的语句块,即可称为函数

DSC00032.gif 合理使用Shell函数,可以使脚本内容更加简洁,增强程序的易读性,提高执行效率

  1. 定义新的函数,两种方法:
  方法一:
  function 函数名 {
  命令序列
  }
  方法二:
  函数名() {
  命令序列
  }
  2. 例子
DSC00033.gif 在脚本中定义一个加法函数,用于计算2个整数的和

DSC00034.gif 调用该函数计算(12+34)、(56+78)的和

  #!/bin/bash
  adder() {
  echo `expr $1 + $2`
  }
  adder 12 34
  adder 56 789


运维网声明 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-557858-1-1.html 上篇帖子: 9-13 shell工作原理和编程中知识点总结 下篇帖子: [9-13]Shell系列6——取算数运算数值
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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