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

三.shell 脚本

[复制链接]

尚未签到

发表于 2018-8-25 12:51:47 | 显示全部楼层 |阅读模式
  ######shell 脚本##########
  Bash脚本基础
  BASH = GNU Bourne-Again Shell,BASH 是 GNU 组织开发和推广的一个项目。
  Bash脚本类似批处理,简单来讲就是把许多的指令集合在一起,并提供循环、
  条件、判断等重要功能,语法简单实用,用以编写程序,大大简化管理员的操
  作,并可以完成图形工具所无法实现的功能。
  如何创建新shell脚本?
  1. 创建包含bash命令的文本文件。文件的第一行应为:
  #!/bin/bash
  2. 使文件可执行(使用chmod +x scripts)
  3. 将文件放置在用户的$PATH的目录中
  ~/bin – 用于用户的私有程序
  /usr/local/bin – 本地开发、系统上的其他人使用的脚本
  /usr/local/sbin - 本地开发、由root使用的脚本
  直接运行脚本和使用source命令运行脚本是不同的!
  脚本调试模式:
  #!/bin/bash -x
  # bash -x scripts
  弱引用
  将字符串放置在双引号中,保留字符串中所有字符的文字值,$、`、\和!字符除外。换言之,变量
  扩展和命令扩展在双引号内仍起作用。
  echo “The current time is $(date +%r).”
  [root@mailwestos html]# echo “The current time is $(date +%r).”
  “The current time is 上午 06时53分23秒.”
  强引用
  将字符串放置在单引号中,保留字符串中所有字符的文字值,同时禁用所有扩展:
  echo “Make $$$ Fast”
  [root@mailwestos html]# echo “Make $$$ Fast”
  “Make 1151$ Fast”
  转义
  非引用的\是转义字符。它保留了下一个字符的文字值。(例如,\$PATH是确切的字符串$PATH,而
  不是PATH变量的内容。)
  [root@server0 ~]# echo "$HOME"
  /root
  [root@server0 ~]# echo "`pwd`"
  /root
  [root@server0 ~]# echo ""Hello, world""
  Hello, world
  [root@server0 ~]# echo "\$HOME"
  $HOME
  [root@server0 ~]# echo "\`pwd\`"
  `pwd`
  [root@server0 ~]# echo "\"Hello, world\""
  "Hello, world"
  Shell计算命令:
  用$[]表示数学运算。用let指示数学运算。用expr表示数学运算。
  用(())表示数学运算。bash内建功能,效率高。
  [root@mailwestos html]# let A=1+2
  [root@mailwestos html]# echo $A
  3
  循环与计算结合:      ##for do done 循环
  #!/bin/bash
  for ((i=1;i=0;SEC--))
  do
  echo -ne "After $(($SEC/60)):$(($SEC%60))s is end "
  echo -ne "\r        \r"
  sleep
  done
  数据库 -NE 逐行显示
  mysql -uroot -predhat -e "show databases;" -NE | grep -E "^\*|schema$" -v   ##显示出数据库
  脚本:
  #!/bin/bash
  for x in $(mysql -uroot -predhat -e "show databases;"    -NE | grep -E "^/*|schema$" -v)
  do
  mysqldump -uroot -predhat $x > /mnt/&x-`date`.dump
  done
  [ "0" = "0" ]
  echo $?
  0
  [ "0" = "0" ]
  echo $?
  1
  位置参数自身:$0、$1、$2、$3....
  所有位置参数: $@、$*
  1 #!/bin/bash
  2 echo "$1"
  3 echo "$2"
  4 echo "$3"
  5 echo "$*"
  6 echo "$@"
  ailwestos mnt]# sh test red hat linux
  red
  hat
  linux
  red hat linux
  red hat linux
  [ -z "$a" ] && echo yes || echo no
  ##当脚本后面没有跟变量时,输出yes
  [ -n "$a" ] && echo yes || echo no
  ##当脚本后面有变量时,输出yes
  #!/bin/bash
  read -p "Please input your users:" username
  useradd $username
  read -p "Please input your password:" passwd
  echo '$passwd'| passwd --stdin $username
  二进制文件运算符
  -ef  查看硬链接节点号 是否一致 ##ln软连接
  -nf  查看时间戳
  -ot  比什么老
  判断输入的数字似乎否在10以内
  #!/bin/bash
  read -p "Please input a number:" a
  [ "$a" -le 10 -a "$a" -ge 0 ] && echo yes || echo no
  if语句
  if命令检查if后面的命令或列表的退出值。如果第一个命令评估为true/零,则运行then
  之后的命令列表,直至任一else。如果第一个命令评估为false/非零,则运行else与fi之
  间的命令列表(反向平写if,标记if块的结束)。
  语法:if command; then command; command2; else command3; fi
  示例:
  if test “$USER” != 'root' ; then
  echo you are not logged in as root
  fi
  if [ $(id -u) -lt 9 ] ; then
  echo “The number $(id -u) is less than 9!”
  fi
  if grep “^${USER}:” /etc/passwd &> /dev/null ; then
  echo “${USER} is a local user on the system.”
  else
  echo “${USER} is not a local user.”
  fi
  case语句
  case语句 :它能够把变量的内容与多个模板进行匹配,再根据成功匹配的模板去决定应该执行哪
  部分代码。
  case "$1" in
  start)
  systemctl start $2
  ;;
  stop)
  systemctl stop $2
  ;;
  reload|restart)
  systemctl stop $2
  systemctl start $2
  ;;
  *)
  echo "Usage: $0 (start|stop|restart|reload)"
  ;;
  esac
  判断文件是什么设备
  #!/bin/bash
  read -p "Please input a filename:" file
  if
  [ -e $file ]
  then
  echo "file is existed"
  else
  echo "file is not existed"
  fi
  if
  [ -b $file ]
  then
  echo "块设备"
  elif
  [ -c $file ]
  then
  echo "字符设备"
  elif
  [ -f $file ]
  then
  echo "普通文件"
  elif
  [ -d $file ]
  then
  echo "目录"
  elif
  [ -L $file ]
  then
  echo "连接文件"
  else
  echo "file is not existed"
  fi
  建立用户的脚本
  #!/bin/bash
  MAX=$( wc -l $1 | cut -d " " -f 1)
  for NUM in $( seq $MAX )
  do
  USERNAME=$( sed -n ${NUM}p $1)
  PASSWD=$( sed -n ${NUM}p $2)
  useradd $USERNAME
  echo $PASSWD | passwd --stdin $USERNAME
  done
  getent passwd user1 ## 显示用户信息
  vim /etc/profile
  export a=5 环境变量
  expect语句
  在shell中利用expect实现自动应答脚本
  yum install expect -y
  expect  ##自动应答
  vim answer.exp
  chmod +x answer.exp
  /mnt/answer.exp
  #!/usr/bin/expect
  spawn /mnt/ask.sh
  expect "name:"
  send "lee\r"
  expect "old"
  send "18\r"
  expect "class"
  send "linux\r"
  expect "happy"
  send "happy\r"
  expect eof
  ##ssh连接
  #!/usr/bin/expect
  set IPADDR [ lindex $argv 0 ]
  set PASS   [ lindex $argv 1 ]
  spawn ssh root@$IPADDR
  expect {
  "yes/no"
  {send "yes\r";exp_continue}
  "password:"
  {send "$PASS\r"}
  }
  interact
  ~
  #!/bin/bash
  for NUM in {1..10}
  do
  ping -c1 -w1 172.25.254.$NUM &> /dev/null && (
  /mnt/ssh.exp 172.25.254.$NUM redhat hostname | grep -E "^The|ECDSA|connecting|Warning|password|spawn" -v|sed "s/Permission\ denied\,\ please\ try\ again\./172.25.254.$NUM password is error/g"
  )
  done


运维网声明 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-556400-1-1.html 上篇帖子: shell基础学习1 下篇帖子: SHELL笔记1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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