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 '/\/p' etc/passwd
删除包含bash的行
sed -e '/bash/d' /etc/passwd
打印并替换
sed -n -e '/\/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
执行以下命令:
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)或者直接打开软件商店,直接点击安装。