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

shell脚本须知

[复制链接]

尚未签到

发表于 2018-8-28 10:44:21 | 显示全部楼层 |阅读模式
  什么是shell脚本,首先它是一个脚本,并不能作为正式的编程语言,说白了就是shell脚本就是一些命令的集合。
  凡是自定义的脚本建议放到/usr/local/sbin/目录下,这样的好处是方便管理和维护,且利于以后交接给接替你的管理员。
  shell脚本的结构
  #cat first.sh
  #! /bin/bash
  ## This is my first shell script.
  date
  echo "Hello world!"
  脚本要以#! /bin/bash开头,代表的意思:该文件是使用的是bash语法,如果不使用该行也是可以的,但是如果把这个脚本放到一个默认shell并非bash的系统里,那么这个脚本很有可能是不能成功执行的。
  还可以适当在脚本中使用#写一些脚本相关的注释内容,如作者、创建日期或者版本等。这些并不是shell脚本一定要的,只是为了统一管理,规范化。
  shell脚本的几种执行方式

  •   fork:直接使用绝对路径来执行脚本,这种方式会启动一个子shell来执行脚本。
  •   source filename:在当前shell环境下,读取并执行filename中的命令。注:该命令可用命令“.”来替代,如:source .bash_rc 与 .  .bash_rc 是等效的。
  •   exec 绝对路径:exec使用shell脚本的绝对路径在当前shell(shell会被重置到初始环境)下执行脚本,脚本执行完后会退出该shell。
  •   ./script启动一个子shell来执行脚本。
  •   sh|bash filename启动一个子shell读取并执行filename中的命令。


  •   子shell的变量结果不会被带回父shell,所以要想通过脚本设置当前shell的环境变量时,要用source命令。
  shell脚本执行方式
  是否需要执行权限
  原因
  exec
  需要执行权限
  由脚本主动调用shell来执行命令
  fork或./
  source或.
  无需执行权限
  由shell主动读取脚本并执行
  bash或sh
  使用sh命令执行一个脚本时,可以使用-x参数查看这个脚本的执行过程,在进行脚本调试时,有利于发现问题。
  # sh -x first.sh
  + date
  Fri Jan  822:28:23 CST 2016
  + echo 'Hello world!'
  Hello world!
  shell自定义变量
  在shell脚本中定义变量,可以方便我们很方便的编辑、修改脚本,且使脚本变得简洁。
  格式:变量名=值
  shell数学运算
  在shell中进行数学运算时,需要使用$[]括起来。
  乘法运算:
  # a=8;b=3;echo "$a*$b=$[$a*$b]"
  8*3=24
  除法运算
  # a=8;b=3;echo "$a/$b=$[$a/$b]"
  8/3=2

  •   默认shell是不支持小数的。如果需要小数,则需要调用bc(linux 系统中的计算器)“yum –y install bc”
  •   bc不会进行四舍五入。
  如果想要保留2位小树,可以这样实现。
  # echo "scale=2;8/3"|bc
  2.66
  shell用户交互
  shell脚本可以实现让用户输入一些字符串(read命令)或者让用户去选择(select语句)的行为。
  read命令
  # cat read.sh
  #! /bin/bash
  ## Using 'read' in shell script.
  read -p "Please input a number: " x
  read -p "Please input another number: " y
  sum=$[$x+$y]
  echo "The sum of the two numbers is: $sum"
  read命令类似与visualbasic的input函数,作用是产生一个“输入行”,将用户输入的字符串赋值给read命令语句后的变量。
  # sh read.sh
  Please input a number: 2
  Please input another number: 10
  The sum of the two numbers is: 12
  select语句
  select 循环提供了一个简单的方法来创建一个编号的菜单,用户可从中选择。它是有用的,当你需要从列表中选择,要求用户选择一个或多个项目。
  select 表达式是一种bash的扩展应用,动作包括:
  l  自动用1,2,3,4列出菜单(没有echo指令,自动显示菜单)
  l  自动read输入选择(没有 read指令,自动输入)
  l  赋值给变量(没有赋值指令,自动输入数字后,赋值字符串给变量)
  语法格式:
  selectvariable in value1 value2 value3 …
  do
  command
  done
  例子:
  # cat sel.sh
  #! /bin/bash
  echo "What is your favourite OS?"
  select var in "Linux" "Gnu Hurd" "FreeBSD" "Other"
  do
  break
  done
  echo "You have selected $var"
  # sh sel.sh
  What is your favourite OS?
  1) Linux
  2) Gnu Hurd
  3) Free BSD
  4) Other
  #? 2
  You have selected Gnu Hurd

  •   select本身就是一个循环,break就是当选择后,就跳出循环。
  •   当变量内容含有空格时,应该将其用""括起来。
  select一般和case语句结合使用,以上面一个例子为例,将它优化下:
  # cat sel.sh
  #! /bin/bash
  echo "What is your favourite OS?"
  select var in "Linux" "Gnu Hurd" "FreeBSD" "Other"
  do
  case $var in
  Linux)
  break;;
  "Gnu Hurd")
  break;;
  "Free BSD")
  break;;
  Other)
  break;;
  *)
  echo "Please enter anumber:(1-4)";;
  esac
  done
  echo "You have selected $var"

  •   select虽然循环却在第一次选择之后不再显示菜单,只循环输入。
  # sh sel.sh
  What is your favourite OS?
  1) Linux
  2) Gnu Hurd
  3) Free BSD
  4) Other
  #? 6
  Please enter a number:(1-4)
  #? 8
  Please enter a number:(1-4)
  #? 3
  You have selected Free BSD
  Shell脚本预设变量
  # cat option.sh
  #! /bin/bash
  sum=$[$1+$2]
  echo "$0$1"+"$2"="$sum"
  # sh option.sh 2 3
  option.sh 2+3=5
  $#表示参数的个数,$0是脚本本身的名字,$1是执行脚本时跟的第一个参数,$2是执行时跟的第二个参数,$3是…当然一个shell脚本的预设变量是没有限制的。
  if语句
  if语句是逻辑判断语句。
  if几种语法格式:
  1)  if 判断语句;then command;fi
  2)  if 判断语句;then command;else command;fi
  3)  if 判断语句
  then
  command
  fi
  4)  if 判断语句
  then
  command
  elif 判断语句
  then
  command
  else
  command
  fi
  例子
  # cat if1.sh
  #! /bin/bash
  read -p "Please input your score: " a
  if ((a,

运维网声明 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.iyunv.com/thread-557636-1-1.html 上篇帖子: shell脚本的结构和4种执行方式 下篇帖子: django shell创建、取出、排序打印
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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