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

shell脚本应用(一)

[复制链接]

尚未签到

发表于 2018-8-28 07:24:06 | 显示全部楼层 |阅读模式
  1.编制我的第一个shell脚本
  shell脚本是什么我来简单的说一下,shell脚本是linux系统中的一个特殊程序,他工作在操作系统内核与应用之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出结果。
  我们来看看我自己的系统支持什么样的shell脚本种类
  [root@dbserver ~]# cat /etc/shells
  /bin/sh
  /bin/bash
  /sbin/nologin
  ........下边的用不上
  这里,/bin/sh是linux版本采用的默认shell脚本,Bash的全称为Bourne Again Shell,是最受欢迎的开源项目。
  其实Shell脚本就是将平时使用的各种Linux命令按顺序保存到一个文本文件,添加执行权限,这个文件就可以叫做shell脚本了。例:
  [root@dbserver script]# cat first.sh
  #!/bin/bash
  cd /boot
  pwd
  ls -lh vml*
  [root@dbserver script]# chmod +x first.sh
  [root@dbserver script]# ./first.sh
  /boot
  -rwxr-xr-x. 1 root root 4.0M Nov 11  2013 vmlinuz-2.6.32-431.el6.x86_64
  这里我执行了三条命令,cd /boot,pwd, ls -lh vml*,执行此脚本后发现没,和这三条命令输出的结果是一样的,这可以说是一个'批量处理'的自动化过程。
  我们编写脚本时要养成一个好习惯就是遵循标准的脚本结构,让脚本能输出友好的提示信息,更加容易读懂,对于代码较多,机构复杂的脚本,应当添加必要的注释文字,如下改写后的脚本:
  [root@dbserver script]# cat first.sh
  #!/bin/bash
  cd /boot
  echo  "In the current directory:"       //当前的目录位于
  pwd
  echo  "Begin with VML files including:"  //其中以VML开头的文件包括
  ls -lh vml*
  [root@dbserver script]# ./first.sh
  In the current directory:
  /boot
  Begin with VML files including:
  -rwxr-xr-x. 1 root root 4.0M Nov 11  2013 vmlinuz-2.6.32-431.el6.x86_64
  是不是很直白明了,哈哈!
  还有别的方法就是不用加执行权限就能直接执行,例如:
  [root@dbserver script]# sh first.sh  //通过/bin/sh来解释脚本
  [root@dbserver script]# . first.sh    //通过点号来加载脚本
  Linux系统中包括大量的Shell脚本文件,如/etc/init.d目录下的各种服务控制脚本这些Shell脚本只能用来参考,尽量避免直接修改系统脚本,以免导致服务或系统故障
  2.重定向与管道操作
  1).重定向操作:用户通过操作系统处理信息的过程中,包括以下几类交互设备文件:
  ■标准输入(STDIN):默认设备是你的键盘,文件编号为0,命令将从标准输入文件中读取在执行过程中需要的输入数据。
  ■标准输出(STDOUT):默认设备是你的显示器,文件编号为1,命令将执行后的输出结果发送到标准输出文件。
  ■标准错误(STDERR):默认设备是你的显示器,文件编号为2,命令将执行期间得各种错误信息发送到标准错误文件。
  关联起来说就是标准输入输出和标准错误默认使用键盘和显示器作为关联的设备,与操作系统进行交互,完成最基本的输入、输出操作。这句话理解起来就是你通过键盘输入的各种命令字串,辅助控制信息,将命令输出到屏幕上,命令执行错误,错误信息也会反馈到屏幕上。在实际的Linux系统维护中,可以改变输入输出的内容方向,而不使用默认的标注输入输出设备(这里指键盘和显示器),这种操作就叫做重定向。
  重定向输出:使用">"或">>"操作符号,分别用于覆盖或追加文件,例:
  [root@dbserver ~]# uname -p > kernel.txt         //输出结果会覆盖到此文件中
  [root@dbserver ~]# cat kernel.txt
  x86_64                              //CPU类型信息
  [root@dbserver ~]# uname -r >> kernel.txt  //输出结果会追加进去而不是覆盖
  [root@dbserver ~]# cat kernel.txt
  x86_64
  2.6.32-431.el6.x86_64            //CPU内核版本信息
  重定向输入:将命令中接收输入的途径由默认的键盘改为指定的文件,例如:
  [root@dbserver ~]# vim pass.txt   //在文本中添加初始密码为"123456"
  123456
  :wq
  [root@dbserver ~]# passwd  --stdin root < pass.txt    //从pass.txt文件中取密码
  Changing password for user root.
  passwd: all authentication tokens updated successfully.  //成功了
  错误重定向:是执行命令过程中出现的错误信息(选项过参数错误)保存到制定的文件中去,而不是直接显示到屏幕上,错误重定向使用'2>'操作符,其中'2'是指错误文件的编号(在使用标准输入输出重定向时省略了1,0编号),在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据,对于shell脚本,还可以把无关紧要的错误信息重定向到空文件中,以保持输出脚本的整洁,例:
  [root@dbserver ~]# tar jcf /nonedir/etc.tgz  /etc/ 2> error.log
  [root@dbserver ~]# cat error.log
  tar: Removing leading `/' from member names
  tar (child): /nonedir/etc.tgz: Cannot open: No such file or directory
  tar (child): Error is not recoverable: exiting now
  使用'2>'操作符时,会像使用'>'操作符一样覆盖目标文件的内容,若要追加内容可以使用’2>>'操作符
  ,有时候你需要编译Apache这些包,你可以把make、make install 这些操作信息定向到空件/dev/null中。省去这些信息。
  3.管道操作:
  管道操作作为不同命令之间的协同工作提供了一种机制,位于管道"|"左侧的命令输出结果,将作为右侧命令的输入(处理对象),对于同一行命令可以使用多个管道,在shell脚本应用中,管道操作通常用来过滤所需要的关键信息。例:
  [root@dbserver ~]# grep "/bin/bash$" /etc/passwd
  root:x:0:0:root:/root:/bin/bash
  oracle:x:500:500::/home/oracle:/bin/bash
  zhangsan:x:501:502::/home/zhangsan:/bin/bash
  lisi:x:502:503::/home/lisi:/bin/bash
  wangmazi:x:503:504::/home/wangmazi:/bin/bash
  [root@dbserver ~]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'
  root /bin/bash
  oracle /bin/bash
  zhangsan /bin/bash
  lisi /bin/bash
  wangmazi /bin/bash
  上述例子中awk命令的作用是以冒号":"作为分隔,输出第一个和第七个区域的字符串,其中的"-F"部分用来指定分隔符号,未指定时默认为空格,关于他的用法请你们多查查资料,这个用的很多的,再举个例子,下面例子中过滤的是/目录的使用率为多少:
  [root@dbserver ~]# df -hT
  Filesystem               Type    Size   Used    Avail  Use%   Mounted on
  /dev/mapper/vg_rhel1-lv_root   ext4    45G    15G     29G   34%       /
  tmpfs                 tmpfs    936M   72K     936M     1%    /dev/shm
  /dev/sda1               ext4    485M    39M    421M    9%     /boot
  [root@dbserver ~]# df -hT |grep "/$" |awk    '{print $6}'
  34%
  今天先写到这把,明天把shell变量怎么用再给你们写写,这东西还有很多,敬请看我更新,咋们从最基础的做起!!


运维网声明 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-557454-1-1.html 上篇帖子: shell脚本相关问题 下篇帖子: Shell文件重定向的3种方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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