砂拉豆 发表于 2018-8-22 12:16:53

Linux Shell篇之二:Shell编程条件语句(1)

  Linux Shell篇之二:Shell编程条件语句(1)
  一、条件语句if
  在LinuxShell编程中,if、for、while、case等条件流程控制语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。下面将逐个来讲解具体的用法:
  if条件判断语句格式
  if (表达式)#if ( Variable in Array )
  语句1
  else
  语句2
  fi
  注:():表示比较数字大小的运算
  练习if语句
  例1:测试数字大小


  查看具体的执行过程,添加参数-x

  例2:测试目录是否存在,不存在则新建
  [ -d /data/shell ]:表示判断目录存在;

  [ ! -d /data/shell ]:表示判断目录不存在;
  
  结果输出:
  
  
  注:中括号的两边必须要有空格!
  例3:使用if条件语句编写MySQL备份脚本

  执行语句并查看:

  注:这里是LAMP的环境,并不是源码包安装的mysql!
  如果是源码包安装的,就需要填写完整的路径,不是直接使用mysqldump的命令!
  二、循环语句for
  语法:
  for i(变量) in 字符串
  do
  语句1
  done
  注:if可以与for整合使用;但是while可以当做条件来循环,功能更强大!
  循环语句for练习
  例1:列打印1-9:




  行打印1-9:



  例2:打印3行内容



  注:表达式:$(( j=j+1 ))=expr $j + 1
  )必须用引号,否则会当成命令;
  例3:循环IP


  把这个IP服务器列表导入到一个文件中:
  sh twenty-four.sh >>ip.txt
  让这20台服务器批量运行命令:如查看本地磁盘的使用情况;
  ssh -l root 192.168.174.16 'df -h'
  出现错误:Address 192.168.174.16 maps to localhost, but this does not map back to the address – POSSIBLE BREAKIN ATTEMPT!
  解决办法:修改这个文件:/etc/ssh/ssh_config yes改成no!并重启系统即可!

  再次执行:ssh -l root 192.168.174.16 'df -h'

  做成免密钥的登录方式:ssh-keygen
  需求:本地机器ssh登录服务器:无需输入密码,即可查看着20台服务器的磁盘使用情况!单向即可!

  步骤1:ssh-keygen -t dsa:将会生成密钥文件和私钥文件id_dsa >
  步骤2:在B上新建目录:mkdir .ssh
  将 .pub 文件复制到B机器的 .ssh 目录:
  scp /root/.ssh/id_dsa.pub root@192.168.174.17:/root/.ssh/
  或者,
  ssh-copy-id -i /root/.ssh/id_dsa.pub 192.168.174.17:/root/.ssh/


  步骤3:并将id_dsa.pub的内容添加到~/.ssh/authorized_keys中:
  cat>
  
  步骤4:目录.ssh和文件authorized_keys的权限必须是600

  完成这些工作后,用户从本地机器到远程机器的登录就不用密码了!

  步骤5:编辑脚本文件:

  步骤6:把脚本的内容导入到IP.txt文件:
  sh twenty-five.sh >>ip.txt
  并查看ip.txt的内容:

  步骤7:把这个脚本批量执行:

  例4:还可以利用这个脚本来复制多个文件到多台服务器上:
  步骤1:编辑脚本:

  步骤2:执行脚本:

  步骤3:查看输出结果!

  2、求和值


  3、同时解压多个文件


  4、同时打包和还原多个文件
  gzip格式:把文件打包,以.gz为结尾,并删除原文件,只留下打包过的文件!



  如何还原批量的.sh文件?
  for i in `ls /tmp/`;do tar -xzf /tmp/$i -C /data/shell/;done

  六、循环语句while
  语法:
  while 条件语句
  do
  语句1
  done
  练习while
  例1:逐行读取某个文件


  mysql -uroot -p123 discuz
页: [1]
查看完整版本: Linux Shell篇之二:Shell编程条件语句(1)