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

Linux shell 脚本实例

[复制链接]

尚未签到

发表于 2018-8-24 08:37:59 | 显示全部楼层 |阅读模式
  1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh
factorial=1  
for a in `seq 1 10`
  
do
  factorial=`expr $factorial \* $a`
  
done
  
echo "10! = $factorial"
  2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。
[root@localhost bak]# cat 11.sh  
#!/bin/bash
  
while true
  
do
  
read -p "please input a number and input key {end} to exit: " var
  if [  $var = "end"  ];then
  exit
  fi
  
echo "your input number is $var"
  
done
  
[root@localhost bak]# bash 11.sh
  
please input a number and input key {end} to exit: 11
  
your input number is 11
  
please input a number and input key {end} to exit: 22
  
your input number is 22
  
please input a number and input key {end} to exit: end
  3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和
#!/bin/bash  
sum=0
  
for i in `seq 1 100`
  
do
  a=$(($i%3))
  if [ $a -eq 0 ];then
  sum=`expr $sum + $i`
  fi
  continue
  
done
  
echo "100以内能被3整除的数之和: "$sum
  4.一个函数,利用shift计算所有参数乘积,假设参数均为整数
[root@localhost bak]# cat 13.sh  
#! /bin/sh
  
result=1
  
while [ $# -gt 0 ]
  
do
  result=`expr $result \* $1`
  shift
  
done
  
echo $result
  
[root@localhost bak]# bash 13.sh 2 3 5 20
  
600
  5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。
#!/bin/sh  
case ${1##*.tar} in
  bz2)
  tar jxvf $1
  ;;
  
gz)
  tar zxvf $1
  ;;
  *)
  
echo "wrong file type"
  
esac
  6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。
  #!/bin/bash
  # favourite OS.       samli          2004.4.19
  echo "What is your favourite OS?"
  select var in "Linux" "UNIX" "Windows" "Other"; do
  echo "You have selected $var."
  #break
  done
  # !/bin/bash
  # list a content summary of a number of RPM packages           samli         2004.4.19
  # USAGE: showrpm rpmfile1 rpmfile2 ...
  # EXAMPLE: showrpm /cdrom/Thizlinux/RPMS/*.rpm
  for rpmpackage in $*;
  do
  if [ -r "$rpmpackage" ];
  then
  echo "=============== $rpmpackage =============="
  /bin/rpm -qip $rpmpackage
  else
  echo "ERROR: cannot read file $rpmpackage"
  fi
  done
  #!/bin/bash
  if [ $# -le 0 ]
  then
  echo "Not enough parameters"
  exit 1
  fi
  #string="2 3 4 5 6"
  #set string
  sum=0
  while [ $# -gt 0 ]
  do
  sum=`expr $sum + $1`
  shift
  done
  echo $sum
  #! /bin/bash
  echo "*******************************"
  echo "Please select your operation:"
  echo " 1 Copy"
  echo " 2 Delete"
  echo " 3 Backup"
  echo "*******************************"
  read op
  case $op in
  C)
  echo "your selection is Copy"
  ;;
  D)
  echo "your selection is Delete"
  ;;
  B)
  echo "your selection is Backup"
  ;;
  *)
  echo "invalid selection"
  esac
  #! /bin/sh
  while true
  do
  echo "*******************************"
  echo "Please select your operation:"
  echo " 1 Copy"
  echo " 2 Delete"
  echo " 3 Backup"
  echo " 4 Quit"
  echo "*******************************"
  read op
  case $op in
  C)
  echo "your selection is Copy"
  ;;
  D)
  echo "your selection is Delete"
  ;;
  B)
  echo "your selection is Backup"
  ;;
  Q)
  echo "Exit ..."
  break
  ;;
  *)
  echo "invalid selection,please try again"
  esac
  done
  #! /bin/sh
  a=10
  b=20
  c=30
  value1=`expr $a + $b + $c`
  echo "The value of value1 is $value1"
  value2=`expr $c / $b`
  echo "The value of value2 is $value2"
  value3=`expr $c * $b`
  echo "The value of value3 is $value3"
  value4=`expr $a + $c / $b`
  echo "The value of value4 is $value4"
  var4=`expr $value4 - $value2`
  echo $var4
  #! /bin/sh
  sum=0
  for i in $*
  do
  sum=`expr $sum + $i`
  done
  echo $sum
  abc=123
  echo $abc
  ###定义函数
  example1()
  {
  abc=456
  }
  ###调用函数
  example1
  echo $abc
  abc=234234
  example1
  echo $abc
  ###定义函数,使用参数
  example2()
  {
  echo $1
  echo $2
  }
  ###调用函数,向它传递参数
  example2 abc bbb
  example2 dksdfsdfsfaa bbb
  #!/bin/bash
  echo "please input a file name:"
  read file_name
  if [ -d $file_name ]
  then
  echo "$file_name is a directory"
  elif [ -f $file_name ]
  then
  echo "$file_name is a regular file"
  elif [ -c $file_name -o -b $file_name ]
  then
  echo "$file_name is a device file"
  else
  echo "$file_name is an unkonwn file"
  fi
  #! /bin/sh
  read first second third
  echo "the first parameter is $first"
  echo "the second parameter is $second"
  echo "the third parameter is $third"
  #! /bin/sh
  if [ $# -ne 2 ]; then
  echo "Not enough parameters"
  exit 0
  fi
  if [ $1 -eq $2 ]; then
  echo "$1 equals $2"
  elif [ $1 -lt $2 ]; then
  echo "$1 less than $2"
  elif [ $1 -gt $2 ]; then
  echo "$1 greater than $2"
  fi
  #clear
  #:trap "" 2 18 20 24
  #e cho "***********************************************************************"
  #e cho " HI! You changed my root password"
  #e cho " This is a little punishment for you then you can use the shell"
  #e cho " You must answer my three questions and type "yes" or "no" to answer"
  #
  #answer="no"
  #
  #e cho "***********************************************************************"
  #e cho "Please press "Enter" key to continue"
  #read
  #while [ $answer = "no" ]
  #do
  #     echo
  #     echo "1.Are you a boy ? (yes/no)"
  #     read answer
  #done
  #
  #answer="no"
  #
  #until [ $answer = "yes" ]
  #do
  #     echo
  #     echo "2.Are you foolish ? (yes/no)"
  #     read answer
  #done
  #
  #answer="no"
  #
  #until [ $answer = "yes" ]
  #do
  #     echo
  #     echo "3.Do you love me ? (yes/no)"
  #     read answer
  #done
  #
  #e cho "***********************************************************************"
  #e cho
  #e cho "Now ! I know you are a foolish girl and you love me."
  #e cho
  #e cho "So you can continue"
  #e cho
  #e cho "**************************************************************"
  #e cho
  #sleep 3
  #e cho "    (haha ! It is just a joke)"
  i=1
  echo "this time i is not equal to 4"
  while [ $i -le 8 ]
  do
  ((i=i+1))
  if [ $i -eq 4 ]
  then
  echo "this time i is equal to 4"
  continue
  fi
  echo "this time i is not equal to 4"
  done
  echo "The command is $0"
  echo "The first argument is $1, the second argument is $2"
  echo "The entire command is $0 $1 $2"
  echo "And there are $# arguments"
  echo "The end of testing"
  #! /bin/sh
  if [ $# -gt 1 ]
  then
  echo "Too many parameters"
  exit 1
  fi
  if [ $# -eq 0 ]
  then
  echo "Too few parameters"
  exit 100
  fi
  if [ ! -d $1 ]
  then
  echo "Usage : $0 directory"
  exit 1
  fi
  #for i in $1/*
  #do
  # if [ -x $i -a ! -d $i ]
  #    then
  #     ls $i
  # fi
  #done
  #!/bin/sh
  RPM=/bin/rpm
  option="-q"
  while true
  do
  echo "what to query?"
  select var in "All" "file" "package name"
  do
  case $var in
  All)
  option=$option"a"
  break
  ;;
  file)
  echo -n "please input file name: "
  option=$option"f"
  read argument
  break
  ;;
  package\ name)
  echo -n "please input package name: "
  read argument
  break
  ;;
  *)
  echo "please choose between 1-3"
  ;;
  esac
  done
  echo "what do you want to know?"
  select var in "location" "info" "package name"
  do
  case $var in
  location)
  option=$option"l"
  break
  ;;
  info)
  option=$option"i"
  break
  ;;
  package\ name)
  break
  ;;
  *)
  echo "please choose between 1-3"
  ;;
  esac
  done
  ${RPM} $option $argument
  echo "continue? [yes/no]"
  read answer
  if [ answer = "no" ]
  then
  break
  fi
  done
  #!/bin/sh
  sum=0
  for a in `seq 1 100`
  do
  if [ `expr $a % 3` -ne 0 ]
  then
  continue
  fi
  echo $a
  sum=`expr $sum + $a`
  done
  echo "sum = $sum"
  #!/bin/bash
  ftype=`file "$1"`
  case "$ftype" in
  "$1: Zip archive"*)
  /usr/bin/unzip "$1" ;;
  "$1: gzip compressed"*)
  /bin/gunzip "$1" ;;
  "$1: bzip2 compressed"*)
  /usr/bin/bunzip2 "$1" ;;
  *)
  echo "Sorry, file $1 can not be uncompressed with smartzip." ;;
  esac
  注:上面有一行,for a in `seq 1 10`,其中seq 1 10 , 即列出现1到10之间所有的数字,这一行也可改为:for a in "1 2 3 4 5 6 7 8 9 10", 在用 expr 进行乘法运算时,为了避免 * 被看成匹配符,需要对其进行转义, 用 \*
  自动备份数据库脚本两个!
  MySQL:Linux下自动备份数据库的shell脚本 Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本,结合 crontab,定时备份数据库。其实非常简单,主要就是使用 MySQL 自带的 mysqldump 命令。
  脚本内容如下:
  #!/bin/sh
  # File: /home/mysql/backup.sh
  # Database info
  DB_NAME="test"
  DB_USER="username"
  DB_PASS="password"
  # Others vars
  BIN_DIR="/usr/local/mysql/bin"
  BCK_DIR="/home/mysql/backup"
  DATE=`date +%F`
  # TODO
  $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/db_$DATE.gz
  然后使用将此脚本加到 /etc/crontab 定时任务中:
  01 5 * * 0 mysql /home/mysql/backup.sh
  好了,每周日凌晨 5:01 系统就会自动运行 backup.sh 文件备份 MySQL 数据库了。
  /home/www/inc/back
  第二个!!!!

  •   #!/bin/sh
  •   # File: /home/mysql/backup.sh
  •   # Database info bakupmysql
  •   DB_USER="user"
  •   DB_PASS="password"

  •   # Others vars
  •   DATE=`date +%Y-%m-%d`
  •   mkdir /home/mysqlbak/$DATE
  •   BIN_DIR="/usr/local/mysql/bin"
  •   BCK_DIR="/home/mysqlbak/$DATE"

  •   # TODO
  •   $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS discuz > $BCK_DIR/discuz.sql
  •   $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS zjblog > $BCK_DIR/zjblog.sql
  •   $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS openads > $BCK_DIR/openads.sql
  写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。参考答案1:
  #!/bin/sh
  for filename in `find /tmp -type f -name "abc*"|head -n 100`
  do
  sed -n '1p' $filename>>new
  done
  解析:第一,用到了find命令,其中-type f表示选取普通文件,-name用于设定文件名;第二,head -n 100命令用于取出前100项。第三,sed -n ’1p’用于取出文件的第一行内容。第四,>>new表示追加到文件new中。参考答案2:
find /tmp -type f -name “abc*” | head -n 100 | xargs head -q -n 1 >> new方法二:  2)写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
  参考答案:
grep -vxFf a b | tee c | wc -l  解析:grep选取-v表示不选择匹配的行,-F表示匹配的模式按行分割,-f a表示匹配模式来自文件a,最后表示目标文件b。即grep命令从b中选取a中不存在的行。 tee c命令创建文件c,wc -l命令统计行数。



运维网声明 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-555754-1-1.html 上篇帖子: 基于mysqldump编写自动全备增备的shell脚本 下篇帖子: Shell 循环检查的格式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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