shell脚本应用(一)

1.编制我的第一个shell脚本

shell脚本是什么我来简单的说一下,shell脚本是linux系统中的一个特殊程序,他工作在操作系统内核与应用之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令并进行解释,将需要执行的操作传递给内核执行,并输出结果。

我们来看看我自己的系统支持什么样的shell脚本种类

[[email protected] ~]# cat /etc/shells

/bin/sh

/bin/bash

/sbin/nologin

........下边的用不上

这里,/bin/sh是linux版本采用的默认shell脚本,Bash的全称为Bourne Again Shell,是最受欢迎的开源项目。

其实Shell脚本就是将平时使用的各种Linux命令按顺序保存到一个文本文件,添加执行权限,这个文件就可以叫做shell脚本了。例:



[[email protected] script]# cat first.sh

#!/bin/bash

cd /boot

pwd

ls -lh vml*

[[email protected] script]# chmod +x first.sh

[[email protected] 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*,执行此脚本后发现没,和这三条命令输出的结果是一样的,这可以说是一个‘批量处理‘的自动化过程。

我们编写脚本时要养成一个好习惯就是遵循标准的脚本结构,让脚本能输出友好的提示信息,更加容易读懂,对于代码较多,机构复杂的脚本,应当添加必要的注释文字,如下改写后的脚本:



[[email protected] script]# cat first.sh

#!/bin/bash

cd /boot

echo  "In the current directory:"       //当前的目录位于

pwd

echo  "Begin with VML files including:"  //其中以VML开头的文件包括

ls -lh vml*

[[email protected] 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



是不是很直白明了,哈哈!

还有别的方法就是不用加执行权限就能直接执行,例如:

[[email protected] script]# sh first.sh  //通过/bin/sh来解释脚本

[[email protected]ver script]# . first.sh    //通过点号来加载脚本

Linux系统中包括大量的Shell脚本文件,如/etc/init.d目录下的各种服务控制脚本这些Shell脚本只能用来参考,尽量避免直接修改系统脚本,以免导致服务或系统故障

2.重定向与管道操作

1).重定向操作:用户通过操作系统处理信息的过程中,包括以下几类交互设备文件:

■标准输入(STDIN):默认设备是你的键盘,文件编号为0,命令将从标准输入文件中读取在执行过程中需要的输入数据。

■标准输出(STDOUT):默认设备是你的显示器,文件编号为1,命令将执行后的输出结果发送到标准输出文件。

■标准错误(STDERR):默认设备是你的显示器,文件编号为2,命令将执行期间得各种错误信息发送到标准错误文件。

关联起来说就是标准输入输出和标准错误默认使用键盘和显示器作为关联的设备,与操作系统进行交互,完成最基本的输入、输出操作。这句话理解起来就是你通过键盘输入的各种命令字串,辅助控制信息,将命令输出到屏幕上,命令执行错误,错误信息也会反馈到屏幕上。在实际的Linux系统维护中,可以改变输入输出的内容方向,而不使用默认的标注输入输出设备(这里指键盘和显示器),这种操作就叫做重定向。

重定向输出:使用">"或">>"操作符号,分别用于覆盖或追加文件,例:



[[email protected] ~]# uname -p > kernel.txt         //输出结果会覆盖到此文件中

[[email protected] ~]# cat kernel.txt

x86_64                              //CPU类型信息

[[email protected] ~]# uname -r >> kernel.txt  //输出结果会追加进去而不是覆盖

[[email protected] ~]# cat kernel.txt

x86_64

2.6.32-431.el6.x86_64            //CPU内核版本信息



重定向输入:将命令中接收输入的途径由默认的键盘改为指定的文件,例如:



[[email protected] ~]# vim pass.txt   //在文本中添加初始密码为"123456"

123456

:wq

[[email protected] ~]# passwd  --stdin root < pass.txt    //从pass.txt文件中取密码

Changing password for user root.

passwd: all authentication tokens updated successfully.  //成功了



错误重定向:是执行命令过程中出现的错误信息(选项过参数错误)保存到制定的文件中去,而不是直接显示到屏幕上,错误重定向使用‘2>‘操作符,其中‘2‘是指错误文件的编号(在使用标准输入输出重定向时省略了1,0编号),在实际应用中,错误重定向可用来收集程序执行的错误信息,为排错提供依据,对于shell脚本,还可以把无关紧要的错误信息重定向到空文件中,以保持输出脚本的整洁,例:

[[email protected] ~]# tar jcf /nonedir/etc.tgz  /etc/ 2> error.log

[[email protected] ~]# 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脚本应用中,管道操作通常用来过滤所需要的关键信息。例:



[[email protected] ~]# 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

[[email protected] ~]# 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"部分用来指定分隔符号,未指定时默认为空格,关于他的用法请你们多查查资料,这个用的很多的,再举个例子,下面例子中过滤的是/目录的使用率为多少:



[[email protected] ~]# 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

[[email protected] ~]# df -hT |grep "/$" |awk    ‘{print $6}‘

34%



今天先写到这把,明天把shell变量怎么用再给你们写写,这东西还有很多,敬请看我更新,咋们从最基础的做起!!

时间: 2024-10-29 23:14:02

shell脚本应用(一)的相关文章

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种:

shell脚本交互:expect学习笔记及实例详解

最近项目需求,需要写一些shell脚本交互,管道不够用时,expect可以很好的实现脚本之间交互,搜索资料,发现网上好多文章都是转载的,觉得这篇文章还不错,所以简单修改之后拿过来和大家分享一下~ 1. expect是spawn: 后面加上需要执行的shell命令,比如说spawn sudo touch testfile 1.3 expect: 只有spawn执行的命令结果才会被expect捕捉到,因为spawn会启动一个进程,只有这个进程的相关信息才会被捕捉到,主要包括:标准输入的提示信息,Li

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性

利用SHELL脚本来验证Oracle数据库RMAN备份集的有效性 作者:赵全文  网名:guestart 我们生产环境的Oracle数据库都做了RMAN备份,是采用了一周的RMAN备份保留策略:除了使用RMAN备份以外,我们还使用了爱数(Eisoo)备份软件来进行备份,可以说是做到了有备无患.可是,如果有一天,Oracle数据库由于主机层面硬件原因或是数据库层面的原因不能对外提供高可用服务的时候,假设数据丢了一大部分,我们只有用RMAN备份来进行恢复,再如果发现,RMAN备份失效了,那就往地缝里

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

利用shell脚本批量修改表

最近公司里因为开发新功能,程序员需要快速在某一个库里的所有表添加字段,于是就用shell脚本简单快速实现批量修改表添加字段 #!/bin/bash export mysql_bin=/usr/local/mysql/bin export database=database export tables=`$mysql_bin/mysql -Bse "use ${database};show tables;"` for i in ${tables}         do          

Shell 脚本模拟 milter 实现黑白名单及关键词过滤

程序执行流程:1. 开始接受邮件.2. 检查发件人是否在黑名单内,如果是拒绝接受;否则继续3. 检查发件人是否在白名单内,如果是接收邮件;否则继续4. 对邮件进行关键字过滤,如果邮件中包含被过滤的关键词信息,则拒绝接收   该邮件;否则,接收该邮件. Usage: sh mailfilter.sh  [-r reject-addr] [-a add-addr][-k keywords]########################################################

Linux Shell脚本攻略(1.12)

1.12 函数和参数 和其他脚本语言一样,Bash同样支持函数,并且可以传递参数. 1.12.1 函数定义和传参 #!/bin/bash function fname() #也可以用fname()代替 { echo $1,$2; #访问参数1和参数2 echo "[email protected]"; #以列表的方式一次性打印所有参数 echo "$*"; #类似于[email protected],但是参数被作为单个实体 return 0; #返回值 } fnam

shell脚本编程学习笔记(1)

在linux上编程,离不开shell,计划好好看看shell编程,并在这里做些笔记以供有相同兴趣的人分享,主要参考<shell脚本学习指南>. 学习shell脚本编程之前,需要了解脚本编程语言和编译型语言的概念. 一般很多中型.大型的程序是用编译型语言写成的,比如C.C++.Java等.这类程序从源代码编译成目标代码,直接通过计算机执行.编译型语言执行效率比较高,大多运作于底层,处理的是字节.整数.浮点数等机器层级的对象,因此实现一个具体的功能,比如"将一个目录里的所有文件复制到另外

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装

用shell脚本实现通用二进制格式mysql 5.5.28 x86_64的安装 首先在网上用gfsoso.com来搜索下载mysql软件包mysql-5.5.28-linux2.6-x86_64.tar.gz,再用 winSCP把mysql上传到服务器上,上传位置可根据个人喜好,我个人一般放在服务器的/usr/local/src目录下. 此处我们是先命令行下实现一次,而后所有操作全部用shell脚本自动实现. 个人环境 centos 6.5 X86-64  所用空闲空间都做成了LVM. 准备工作