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

linux学习笔记四(shell编程二)

[复制链接]

尚未签到

发表于 2018-8-29 13:33:00 | 显示全部楼层 |阅读模式
  写一个脚本:
  计算100以内所有能被3整除的正整数的和;
  取模,取余:%
  3%2=1
  100%55=45
  #!/bin/bash
  let SUM=0
  for I in {1..100};do
  TMP=$[$I%3]
  if [ $TMP -eq 0 ];then
  SUM=$[$SUM+$I]
  fi
  done
  echo "SUM is $SUM"
  写一个脚本:
  计算100以内所有奇数的和以及所有偶数的和;分别显示之;
  写一个脚本:
  每5秒钟进行判断某用户是否登录。
  #!/bin/bash
  for I in `seq 100`;do
  w|grep "wuxiangd" &>/dev/null && echo "wuxiangdong is loggin in" || echo "wuxiangdong is not loggin in"
  sleep 5
  done         
  写一个脚本:
  启动服务的选项:只接受参数start,stop,restart,status其中之一
  #!/bin/bash
  if [ $# -lt 1 ];then
  echo "Usage: `basename $0` {start|stop|restart|status}"
  fi
  case $1 in
  -sta*)
  echo "service start"
  ;;
  -stop)
  echo "service stop"
  ;;
  -restart)
  echo "service restart"
  ;;
  -status)
  echo "service running"
  ;;
  *)
  echo "Unknow"
  exit 2
  ;;
  esac
  写一个脚本:
  判断10个随机数中,最大和最小的随机数,并且输出
  #!/bin/bash
  declare -i MIN=0
  declare -i MAX=0
  for I in {1..10};do
  MYRANDOM=$RANDOM
  [ $I -eq 1 ] && MIN=$MYRANDOM
  if [ $I -lt 10 ];then
  echo -n "$MYRANDOM ,"
  else
  echo "$MYRANDOM"
  fi
  if [ $MYRANDOM -gt $MAX ];then
  MAX=$MYRANDOM
  fi
  if [ $MYRANDOM -lt $MIN ] ;then
  MIN=$MYRANDOM
  fi
  done
  echo "The Max is $MAX"
  echo "The Min is $MIN"
  
  写一个脚本:
  通过选项-del -add -v等参数进行删除和增加用户。
  #!/bin/bash
  #
  DEBUG=0
  ADD=0
  DEL=0
  for I in `seq 0 $#`; do
  if [ $# -gt 0 ]; then
  case $1 in
  -v|--verbose)
  DEBUG=1
  shift ;;
  -h|--help)
  echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
  exit 0
  ;;
  --add)
  ADD=1
  ADDUSERS=$2
  shift 2
  ;;
  --del)
  DEL=1
  DELUSERS=$2
  shift 2
  ;;
  *)
  echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
  exit 7
  ;;
  esac
  fi
  done
  if [ $ADD -eq 1 ]; then
  for USER in `echo $ADDUSERS | sed 's@,@ @g'`; do
  if>
  [ $DEBUG -eq 1 ] && echo "$USER exists."
  else
  useradd $USER
  [ $DEBUG -eq 1 ] && echo "Add user $USER finished."
  fi
  done
  fi
  if [ $DEL -eq 1 ]; then
  for USER in `echo $DELUSERS | sed 's@,@ @g'`; do
  if>
  userdel -r $USER
  [ $DEBUG -eq 1 ] && echo "Delete $USER finished."
  else
  [ $DEBUG -eq 1 ] && echo "$USER not exist."
  fi
  done
  fi
  练习:写一个脚本showlogged.sh,其用法格式为:
  showlogged.sh -v -c -h|--help
  其中,-h选项只能单独使用,用于显示帮助信息;-c选项时,显示当前系统上登录的所有用户数;
  如果同时使用了-v选项,则既显示同时登录的用户数,又显示登录的用户的相关信息;如
  Logged users: 4.
  They are:
  root     tty2         Feb 18 02:41
  root     pts/1        Mar  8 08:36 (172.16.100.177)
  root     pts/5        Mar  8 07:56 (172.16.100.177)
  hadoop   pts/6        Mar  8 09:16 (172.16.100.177)
  #!/bin/bash
  #
  declare -i SHOWNUM=0
  declare -i SHOWUSERS=0
  for I in `seq 1 $#`; do
  if [ $# -gt 0 ]; then
  case $1 in
  -h|--help)
  echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
  exit 0 ;;
  -v|--verbose)
  let SHOWUSERS=1
  shift ;;
  -c|--count)
  let SHOWNUM=1
  shift ;;
  *)
  echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
  exit 8 ;;
  esac
  fi
  done
  if [ $SHOWNUM -eq 1 ]; then
  echo "Logged users: `who | wc -l`."
  if [ $SHOWUSERS -eq 1 ]; then
  echo "They are:"
  who
  fi
  fi
  写个脚本,按如下方式执行:
  mkscript.sh -v|--version VERSION -a|--author AUTHOR -t|--time DATETIME -d|--description DESCRIPTION -f|--file /PATH/TO/FILE -h|--help
  1、此脚本能创建或打开-f选项指向的文件/PATH/TO/FILE;
  如果其为空文件,能自动为其生成第一行;
  如果文件不空,且第一行不是#!/bin/bash,则中止此脚本,并报错“The file is not a bash script.";
  否则,则直接使用vim 打开此文件;
  提示:/PATH/TO/FILE,要判断其目录是否存在;如果不存在,则报错;
  2、如果为空文件,自动生成的第一行内容为:
  #!/bin/bash
  3、如果为空文件,且使用了-a选项,则在文件中添加“# Author: -a选项的参数”,比如:
  # Author: Jerry
  4、如果为空文件,且使用了-t选项,则在文件中添加“# Date: 脚本执行-t选项后指定的时间”,比如:
  # Date: 2013-03-08 18:05
  5、如果为空文件,且使用了-d选项,则在文件中添加“# Description: -d选项的内容”,比如:
  # Description: Create a bash script file head.
  6、如果为空文件,且使用了-v选项,则在文件添加“# Version: -v后跟的参数”,比如:
  # Version: 0.1
  6、-h选项只能单独使用,用于显示使用帮助;
  7、其它选项,显示帮助信息;
  说明:
  这是一个用于创建脚本的脚本,它可以自动帮助创建一个bash脚本的文件头,这样,以后使用此脚本来创建其它脚本将变得比较高效。比如:
  #!/bin/bash
  # Author: Jerry(jerry@magedu.com)
  # Date: 2013-03-08 18:05
  # Description: Create a bash script file head.
  # Version: 0.1
  #
  实现:
  
  #!/bin/bash
  declare -i VERSION=0
  declare -i AUTHOR=0
  declare -i TIME=0
  declare -i DESCRIPTION=0
  declare -i FILE=0
  for I in `seq $#`;do
  -v|-version)
  VERSION=1
  MYVERSION=$2
  -a|--author)
  AUTHOR=1
  MYAUTHOR=$2
  shift 2
  ;;
  -t|-time)
  TIME=1
  MYTIME=$2
  shift 2
  ;;
  -d|--description)
  DESCRIPTION=1
  MYDESCRIPTION=$2
  shift 2
  ;;
  -f|--file)
  FILE=1
  MYFILE=$2
  shift 2
  ;;
  -h|-help)
  exit 0
  ;;
  *)
  esac
  fi
  done
  #######################################################################################
  if [ $FILE -eq 1 ];then
  if [ -e $MYFILE ];then
  MYHEAD=`head -1 $MYFILE`
  if [ "$MYHEAD" == "#!/bin/bash" ];then
  if [ $AUTHOR -eq 1 ];then
  echo "#Author:$MYAUTHOR">>$MYFILE
  fi
  if [ $TIME -eq 1 ];then
  echo "#Date:$MYTIME">>$MYFILE
  fi
  if [ $DESCRIPTION -eq 1 ];then
  echo "#Description:$MYDESCRIPTION">>$MYFILE
  fi
  if [ $VERSION -eq 1 ];then
  echo "#Version:$MYVERSION">>$MYFILE
  fi
  vim + $MYFILE
  exit 0
  else
  echo "The file $MYFILE is not a bash Script!"
  fi
  else
  touch $MYFILE
  echo "#!/bin/bash">>$MYFILE
  if [ $AUTHOR -eq 1 ];then
  echo "#Author:$MYAUTHOR">>$MYFILE
  fi
  if [ $TIME -eq 1 ];then
  echo "#Date:$MYTIME">>$MYFILE
  fi
  if [ $DESCRIPTION -eq 1 ];then
  echo "#Description:$MYDESCRIPTION">>$MYFILE
  fi
  if [ $VERSION -eq 1 ];then
  echo "#Version:$MYVERSION">>$MYFILE
  fi
  vim + $MYFILE
  exit 0
  fi
  fi
  写一个脚本:
  1、通过ping命令测试192.168.0.151到192.168.0.254之间的所有主机是否在线,
  如果在线,就显示"ip is up.",其中的IP要换为真正的IP地址,且以绿色显示;
  如果不在线,就显示"ip is down.",其中的IP要换为真正的IP地址,且以红色显示;
  要求:分别使用while,until和for(两种形式)循环实现。
  ping
  -c(ping d的次数)
  -W (多长时间内有效)
  方法一:
  
  #!/bin/bash
  declare -i I=1
  while [ $I -le 100 ];do
  if ping -c 1 -W 2 10.25.84.$I &>/dev/null;then
  echo "10.25.84.$I is up"
  sleep 2
  else
  echo "10.25.84.$I is down"
  sleep 2
  fi
  let I+=1
  done
  方法二:
  #!/bin/bash
  declare -i I=1
  until [ $I -eq 100 ];do
  if ping -c 1 -w 1 10.25.84.$I &>/dev/null;then
  echo "10.25.84.$I is up"
  sleep 1
  else
  echo "10.25.84.$I is down"
  sleep 1
  fi
  let I+=1
  done
  方法三:
  #!/bin/bash
  for I in `seq 100`;do
  if ping -c 1 -W 1 10.25.84.$I &>/dev/null;then
  echo "10.25.84.$I is up"
  sleep 1
  else
  echo "10.25.84.$I is down"
  fi
  done
  方法四:
  #!/bin/bash
  for ((I=0;I/dev/null;then
  echo "10.25.84.$I is up"
  sleep 1
  else
  echo "10.25.84.$I is down"
  sleep 1
  fi
  done
  写一个脚本(前提:请为虚拟机新增一块硬盘,假设它为/dev/sdb),为指定的硬盘创建分区:
  1、列出当前系统上所有的磁盘,让用户选择,如果选择quit则退出脚本;如果用户选择错误,就让用户重新选择;
  2、当用户选择后,提醒用户确认接下来的操作可能会损坏数据,并请用户确认;如果用户选择y就继续,n就退出;否则,让用户重新选择;
  3、抹除那块硬盘上的所有分区(提示,抹除所有分区后执行sync命令,并让脚本睡眠3秒钟后再分区);
  并为其创建三个主分区,第一个为20M,第二个为512M, 第三个为128M,且第三个为swap分区类型;
  (提示:将分区命令通过echo传送给fdisk即可实现)
  fdisk -l |grep "
  dd if=/dev/zero of=/dev/sdb bs=512 count=1
  sync
  sleep 3
  ###########################################################################################
  #!/bin/bash
  echo "This is all partion:"
  PARTITIONS=`fdisk -l 2>/dev/null |grep "^Disk /dev/[sh]d[a-z]"|awk '{print $2}'|cut -d: -f1`
  echo "$PARTITIONS"
  echo -e "Plerse Input partion:\033[31m(quit)\033[0m"
  read PART
  if [ $PART == 'quit' ];then
  exit 0
  fi
  until echo "$PARTITIONS" | grep "$PART" ;do
  read PART
  done
  echo -e "The partition will be formate:\033[31m[y|n]\033[0m"
  read SELECT
  if [ $SELECT == 'y' ];then
  dd if=/dev/zero of=$PART bs=512 count=1 &>/dev/null
  sync
  sleep 3
  echo "Format complete!"
  else
  exit 0
  fi
  echo -e "Do you want to make a partion?\033[31m[y|n]\033[0m"
  read SELECT1
  if [ $SELECT1 == 'y' ];then
  echo 'n
  p
  1
  +40M
  n
  p
  2
  +512M
  n
  p
  3
  +128M
  t
  3
  82
  w'|fdisk $PART &>/dev/null
  if [ $? -eq 0 ];then
  echo "Build successful!"
  fi
  else
  exit 0
  fi
  echo -e "Do you want to build file system?\033[31m[y|n]\033[0m"
  read SELECT2
  if [ $SELECT2 == 'y' ];then
  for I in `echo "$PARTITIONS"`;do
  mke2fs -j $I &>/dev/null
  done
  echo "build complete!"
  else
  exit 0
  fi
  fdisk -l
  
  
  写一个脚本,完成以下功能:
  说明:此脚本能于同一个repo文件中创建多个Yum源的指向;
  1、接受一个文件名做为参数,此文件存放至/etc/yum.repos.d目录中,且文件名以.repo为后缀;要求,此文件不能事先存,否则,报错;
  2、在脚本中,提醒用户输入repo>
  3、repo name以及baseurl的路径,而后以repo文件的格式将其保存至指定的文件中;
  4、enabled默认为1,而gpgcheck默认设定为0;
  5、此脚本会循环执行多次,除非用户为repo>
  
  ###########################################################################################
  #!/bin/bash
  CREATE=0
  if [ $# -gt 0 ];then
  case $1 in
  --help|-h)
  echo "Usage:`basename $0` {--help|-h }"
  exit 0;
  ;;
  -c|--create)
  CREATE=1;
  FILENAME=$2;
  ;;
  *)
  echo "Usage:`basename $0` {--help|-h }"
  exit 1;
  ;;
  esac
  fi
  if [ $CREATE -eq 1 ];then
  if [ -e /etc/yum.repos.d/${FILENAME}.repo ];then
  echo "$FILENAME exis!"
  exit 1;
  else
  >
  declare -i I=1
  while [ $ID != 'quit' ] && [ $ID != 'q' ] ;do
  touch /etc/yum.repos.d/${FILENAME}.repo
  echo "Create ${I}th"
  read -p "Please input>
  if [ $ID == 'quit' ] || [ $ID == 'q' ];then
  exit 0;
  else
  echo "[$ID]" >> /etc/yum.repos.d/${FILENAME}.repo
  fi
  read  -p "Please input Name:" NAME
  echo "name=$NAME" >> /etc/yum.repos.d/${FILENAME}.repo
  read -p "Please input baseurl:" BASEURL
  echo "baseurl=$BASEURL" >> /etc/yum.repos.d/${FILENAME}.repo
  echo "enable=1" >> /etc/yum.repos.d/${FILENAME}.repo
  echo "gpgcheck=0" >> /etc/yum.repos.d/${FILENAME}.repo
  let I=$I+1
  echo $I
  done
  fi
  fi
  
  
  
  
  
  
  
  
  


运维网声明 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-558224-1-1.html 上篇帖子: shell脚本——为rdesktop加点GUI界面 下篇帖子: Shell 脚本在开发中的体验
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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