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

shell练习题之bash知识点(for循环、if判断语句结构练习)

[复制链接]

尚未签到

发表于 2018-8-22 11:58:59 | 显示全部楼层 |阅读模式
  bash知识点:文件测试
  [ ]
  [[ ]]
  test
  单目测试:
  -e file :测试文件是否存在
  -a file :测试文件是否存在
  -f file: 测试是否为普通文件
  -d 目录: 测试是否为目录文件
  -h file:   测试是否为链接文件
  -r somefile:  测试其有效用户是否对此文件有读取权限
  -w somefile:  测试其有效用户是否对此文件有写权限
  -x somefile:  测试其有效用户是否对此文件有执行权限
  

-b somefile : 测试文件是否存在并且是否为一个块设备文件  
-c somefile : 测试文件是否存在并且是否为一个字符设备文件
  
-h|-L somefile : 测试文件是否存在并且是否为符号链接文件
  
-p somefile : 测试文件是否存在并且是否为管道文件:
  
-S somefile : 测试文件是否存在并且是否为套接字文件:
  
-s somefile:  测试文件是否存在并且不空
  

  双目测试:
  file1 -nt file2 :测试file1是否比file2更 新一些
  file1 -ot file2 :测试file1是否比file2更 老一些
  在脚本中使用source命令倒入别的文件
  [ -r 配置文件 ] && cource 配置文件
  bash的知识点:位置参数轮替
  shift
  练习题:
  一、编辑一个脚本,判断/tmp目录下有没有1这个目录,如果有就退出,如果没有就创建目录1
  1)在命令行执行以下命令:
  fileName=/tmp/1
  [ -e $fileName ] || mkdir $fileName
  解释:1.使用变量fileName=/tmp/1
  2.[ ]中括号里面-e表示 :如果目录/tmp下有目录1则为true(真);否则为false(假)
  3.为true(真)则不执行后面的mkdie $fileName,为false(假)则执行
  二、编写一个可调用.conf配置文件的脚本
  2.1首先在/tmp/scripts目录下创建一个.conf配置文件
  [root@localhost scripts]# vim myscripts.conf
  userName=tom
  fileName=/etc/passwd
  2.2开始编写myscripts.sh脚本
  [root@localhost scripts]# vim myscripts.sh
  #!/bin/bash
  source /tmp/scripts/myscripts.conf
  echo $userName
  **2.3给myscripts.sh脚本加定义***
  #!/bin/bash
  #configfile:/temp/scripts/myscripts.conf
  [ -r /tmp/scripts/myscripts.conf ] && source /tmp/scripts/myscripts.conf     #source可以用.表示
  userName=${userName=Jerry}
  echo $userName
  解释:1.创建myscripts.conf配置文件
  2.使用vim编辑myscripts.sh脚本
  3.添加注释,配置文件目录路径,
  4.使用[ -r 文件绝对路径 ]来判断文件是否存在,#-r 表示当前用户是否对文件有读权限
  5.如果前面为true(真)那么使用source或.调用myscripts.conf配置文件,并将myscripts.conf中的userName变量内容输出
  6.如果前面为false(假),后面就忽略;直接打印脚本内定义的变量内容(输出内容: Jerry)
  三、编写一个脚本,将/var/log拷贝到/tmp/logs
  在编写脚本之前我们可以做个小测试:
  [root@localhost scripts]# which wget
  /usr/bin/wget
  [root@localhost scripts]# echo $?
  0
  解释:利用wich wget判定这个wget这个命令存不存在
  创建脚本vim download.sh     编写完使用-n检查下脚本语法(sh -n download.sh)
  [root@localhost scripts]# vim download.sh
  #!/bin/bash
  url='ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe'
  which wget &> /dev/null || exit 5
  downloader=which wget
  [ -x$downloader ] || exit 6
  $downloader $url
  解释:1.添加一个url
  2.利用which判定wget存不存在,将结果输出到空(>/dev/null);不存在即退出。
  3.使用变量downloader定义为which wget
  4.然后利用[ -x ]来判定当前用户是否对downloader有执行权限,没有则退出
  5.执行$downloader $url(效果等于wget ftp://192.168.100.157/hzftp/IP%C9%A8%C3%E8%B9%A4%BE%DF.exe)
  四、写一个脚本,完成以下任务:
  1.分别复制/var/log下的文件复制到/tmp/logs目录中
  2.复制目录时,才使用cp -r
  3.复制文件时,使用cp
  4.复制链接文件,使用cp -d
  5.如果是其他文件,使用cp -a
  [root@localhost scripts]# vim cplog.shs
  

copyCommand='cp'  

  elif [ -f $fileName ]; then
  #!/bin/bash
  #
  targetDir='/tmp/logs'
  [ -e $targeDir ] || mkdir $targeDir
  for fileName in /var/log/*;do
  if [ -d $fileName ]; then
  copyCommand='cp -r'
  elif [ -f $fileName ]; then
  copyCommand='cp'
  elif [ -h $fileName ]; then
  copyCommand='cp -d'
  else
  copyCommand='cp -a'
  fi
  $copyCommand $fileName $targetDir
  done
  解释:1.编辑变量目标目录(targetDir)
  2.判断目标目录是否存在,不存在则创建
  3.for循环语句(将/var/log下面所有文件拷贝)
  4.if判断语句([ -d ]对应目录文件,[ -f ]对应普通文件,[ -h ]对应链接文件,[ -a ]对应其他文件
  5.将变量按照先后循序排列(拷贝命令 文件 目标目录)
  ~
  ~
  ~
  ~
  ~
  ~
  五、编写一个脚本,完成以下任务
  script.sh {start|stip|restart|status}
  如果为空,则显示帮助信息 script.sh {start|stip|restart|status}



运维网声明 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-555110-1-1.html 上篇帖子: Shell笔记8——for和select循环的应用实践 下篇帖子: shell特殊符号/cut,sort,wc,uniq,tee,tr,split命令
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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