您的位置:首页 > 运维架构 > Shell

Linux基本功十三:shell脚本Sed & Awk 及软件的安装

2013-08-07 21:32 489 查看
    shell脚本编程Scripting Language【把命令放到一个文本文件里,让其自动执行】 JSP-Java Service Page;perl python shell [bin/sh]--[bin/bash]不同的脚本其语法是不一样的。例如 bash csh tcsh ksh等
1、基础命令用法总结
 wc命令。Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

 -c 统计字节数。

 -l 统计行数。

 -m 统计字符数。这个标志不能与 -c 标志一起使用。

 -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

 -L 打印最长行的长度。

(1)看文件的个数
ls | wc -l
(2)看看有几个文件详细信息
ls -l |grep ^d
(3)看有多少个文件夹
ls -l | grep ^d |wc -l
(4)查看命令的位置:startx,service
which startx;
vi `which startx`
(5)[bin/sh]与[bin/bash]的区别

  “sh”并不是一个程序,而是一种标准(POSIX),这种标准,在一定程度上(具体区别见下面的“Things bash has that sh does not”)保证了脚本的跨系统性(跨UNIX系统)

  bash的POSIX标准

  在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式(等效于bash的 --posix 参数) 一般的,sh是bash的“子集”(不是子集的部分,具体区别见下的“Things sh has that bash does not”)

(6)脚本的分类

  第一个字符非#,表示bash脚本;

  第一个字符为#,第二个字符非!,表示为csh脚本;

  第一个字符是#,第二个字符是!

(7)shell三种执行方式(前面有总结):

   直接执行路径相当于打开一个新的shell,bash aa也是打开一个新的bash;

   注意export的作用这是在该shell和子shell里可见;

   第一:要求可执行权限,且在新shell执行。a+x,输入脚本的绝对路径和相对路径;

  ./root/backup

  ./backup

  第二:bash脚本 或 tcsh脚本,是在新的shell里执行。表示以bash或tcsh来执行脚本

  -bash  /root/backup

  第三:在脚本的前面加“.”,在当前的shell里执行;

实例:关闭系统中的apache的shell脚本:
#here ,the " " in AAA is very important!
#httpd is a Apache program,the next program is going to kill them.
AAA="`pgrep httpd`"
[ -z "$AAA" ] && echo 'httpd is not running!' && exit
for i in $AAA
do
kill -9 $i
done
echo httpd is kill
2、sed流编辑器(Stream Editor)shell文本里修改的时候可以用sed。适合行的处理。 

(1)sed替换单词 打印 删除 

  sed的修改没有对源文件进行修改,而只是输出到屏幕;
sed -e 's/root/shrek/g' /etc/passwd > /tmp/a
cp /tmp/a /etc/passwd
   打开包含shrek开头的行
sed -n -e '/shrek/p' /etc/passwd
   只显示以shrek单词的行
sed -n -e '/\<shrek\>/p' etc/passwd
   删除包含bash的行
sed -e '/bash/d' /etc/passwd
   打印并替换
sed -n -e '/\<shrek\>/s/shrek/nologin/p' etc/passwd
   删除#开头和空格
sed -e '/^#/d' -e '/^$/d' /etc/squid/squid.conf
   s/old/new 替换

   删除1至10行,替换yellow为black;
sed -e '1,10d' -e 's/yellow/black/g' yel.dat
   执行多个命令的的3种方式:多次替换
   (1)用-e 参数直接执行多个命令:
sed -e 's/root/shrek/g' -e 's/bash/nologin' /etc/passwd
   (2)sed -f script_file。当然我们也可以将两个命令写入某个文件

   cat operation

   在operation文件里:
#!/bin/bash
s/root/shrek/g
s/bash/nologin/g
   执行命令:
sed -f operation /etc/passwd
   (3)进一步简洁,可以写成一个脚本来执行:

    cat operation

   在operation文件里:
#!/bin/sed -f
s/root/shrek/g
s/bash/nologin/g
   执行命令:
./operation /etc/passwd
   -e 执行命令

   -n 默认不打印 只有和p同时使用的时候才会输出; 

   -f 执行相应的文本

   p打印

类似实例如下:

   a、sed -e 's/shrek/root' -e 's/root/shrek' /ect/passwd

   b、sss是一个文件:
vi sss
s/root/shrek
s/shrek/root
      执行以下命令:
sed -f sss /etc/passwd
   c、脚本文件
vi sss
#!/bin/sed -f
s/root/shrek
s/shrek/root
      执行以下命令:
<pre name="code" class="objc">chmod a+x sss
./sss /etc/passwd





3、awk是一种处理文本的编程语言工具,不仅处理行,还能处理列,功能更强;    chkconfig --list | awk '$1=="httpd" {print $5}'(1) 查看apache服务的开关问题,httpd时apache超文本传输协议服务器的主程序;处理列;$1,$2,$3表示第1,2,3列;$0表示第一行;    统计打开的服务有多少个?    awk处理列的问题:
chkconfig --list |awk '{printf $4}'  //单引号是避免脚本的影响;
chkconfig --list |awk '$1=="httpd" {print $4}'
chkconfig --list |awk 'BEGIN {iii=0} {if($5=="3:on") iii=iii+1} END{print iii}'
if[ `chkconfig --list | awk '$1=="httpd" {print $5}'` = "3:on" ];then echo ok;fi
 
  awk处理行文本;

(2)a、在/etc/passwd下是用bash的用户有多少个?
awk -F: 'BEGIN {iii=0} {if($7=="/bin/bash") iii+=1} END{print iii}' < /etc/passwd
     以:作为分隔符;统计第七列中有/bin/bash的用户的个数;
awk -F: '{print $1 "UID is " $3}' /etc/passwd
     b、利用脚本文件来处理:awk -f excute_file;
vi aa
BEGIN {iii=0}
{if ($5=="3:on") iii+=1}
END {print iii}
     执行命令:
chkconfig --list | awk -f aa
通过info可以查看帮助文档,有*的可是点击打开,是小例子,按U返回:

 info awk

 info sed

     -F;  //表示以冒号作为分隔符;

     函数与操纵的东西需要用{ }括起来;

   实例应用:  用awk来分析日志文件:
cd /var/log/httpd
     这里我们可以用sed和awk来分析这些数据,统计里面的次数;

4、软件的安装

(1)源码软件的安装
tar -xvfj http...bz2 //解压
cd httpd
./configure  //配置环境
make         //编译
make install //安装
uninstall    //卸载
    (2)*1386.rpm安装包和windows里的软件包一样的,打包的二进制安装文件;

     RPM包安装:
rpm -ivh somesoft.rpm //安装
rpm -e somefost.rpm  //反安装
rpm -q somefost 或 rpm -qpi somefost.rpm//查询
    (3)或者直接打开软件商店,直接点击安装。


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: