wzh313
  1. Shell作用和使用技巧
  2. Shell文件权限和脚本执行
  3. Shell变量类型和运算符
  4. Shell输入和输出功能
  5. Shell条件测试和流程控制
  6. Shell文件操作
  7. Linux启动流程和服务脚本
  8. Shell编写字符菜单管理
  9. Shell编写邮件报警脚本
  10. Shell信号捕捉和日志处理
  11. Shell如何操作Mysql数据库
  12. Shell结合cgi实现web功能
  13. Shell结合php实现web功能
  14. Rsync智能网站备份 

一、Shell作用和使用技巧

1、Shell的作用

命令解释器,“翻译官”
shell命令,shell脚本
查看文件:ls
查看根目录下文件:ls /
清屏:clear

简单的循环:

<bash-3.2>inas@44-_-[/inas/inas/dream]# ls
for.sh
<bash-3.2>inas@44-_-[/inas/inas/dream]# cat for.sh
#!/bin/bash
#for.sh
for i in a b c d e f
do
        echo $i
done
<bash-3.2>inas@44-_-[/inas/inas/dream]# ./for.sh
a
b
c
d
e
f
<bash-3.2>inas@44-_-[/inas/inas/dream]# 

运行脚本命令:
sh for.sh
bash for.sh
./for.sh

 

for语句用一行表示: 

webusr@iomtimer1:/bea/script/iom/ksprocess/tmpbak >for i in `cat *pid`;do echo \'kill -9 \'$i >> killprocess.sh;done
webusr@iomtimer1:/bea/script/iom/ksprocess/tmpbak >cat killprocess.sh
kill -9 4588444
kill -9 3605060
kill -9 6619324
kill -9 3932688
kill -9 6947664
kill -9 1049448
webusr@iomtimer1:/bea/script/iom/ksprocess/tmpbak >

 

#!/bin/bash
#for.sh

for (( i = 0; i < 10; i++ )); do  #一行写多个命令用分号隔开
    echo $i
    sleep 1 #循环1秒
done 

开发模式技巧,通过scp或FileZilla登录后,在线打开编辑,通过专业编辑软件(例如Sublime Text3)进行开发,比vi、vim模式更便于开发。

 

2、Shell的常用技巧

 登录工具,putty、SecureCRT

修改用户密码:

普通用户登录,修改自己的密码,passwd回车,会让你先输入自己的旧密码,再输入两遍新密码。
root用户登录,修改子用户密码,password username回车,就可以修改username的密码了,直接输入两遍新密码就可以了,不用输入旧密码。

关机及重启:

关机命令:
1、halt 立刻关机 
2、poweroff 立刻关机 
3、shutdown -h now 立刻关机(root用户使用) 
4、shutdown -h 10 10分钟后自动关机 如果是通过shutdown命令设置关机的话,可以用shutdown -c命令取消重启
5、init 0 立即关机

重启命令:
1、reboot 
2、shutdown -r now 立刻重启(root用户使用) 
3、shutdown -r 10 过10分钟自动重启(root用户使用) 
4、shutdown -r 20:35 在时间为20:35时候重启(root用户使用) 如果是通过shutdown命令设置重启的话,可以用shutdown -c命令取消重启
5、init 6 立即重启 或 init 1

init 是所有进程的祖先,它的进程号始终为1,所以发送TERM信号给init会终止所有的用户进程,守护进程等,init定义了8个运行级别(runlevel),init 0为关机,init 1为重启。

关机重启系列命令的区别,参考文章:https://www.cnblogs.com/zhangbing12304/p/8185346.html

退出会话:exit

3、Shell重定向和管道

Bash常用功能

解释器:
  #!/bin/bash
  #!/bin/ksh
  #!/usr/bin/env python
Tab键自动补齐:
  bash下,按下tab键会自动识别并补全命令。
命令历史:

[webusr@iomweb1 network-scripts]$ history -c  #清楚历史命令
[webusr@iomweb1 network-scripts]$ history #查看历史命令
   29  hisroty
   30  history
   31  ls
   32  clear
   33  history
[webusr@iomweb1 network-scripts]$ !31   #实际上执行的是历史中第31条命令
ls
ifcfg-bond0  ifdown       ifdown-isdn    ifdown-TeamPort  ifup-ib     ifup-post      ifup-tunnel
ifcfg-eno1   ifdown-bnep  ifdown-post    ifdown-tunnel    ifup-ippp   ifup-ppp       ifup-wireless
ifcfg-eno2   ifdown-eth   ifdown-ppp     ifup             ifup-ipv6   ifup-routes    init.ipv6-global
ifcfg-eno3   ifdown-ib    ifdown-routes  ifup-aliases     ifup-isdn   ifup-sit       network-functions
ifcfg-eno4   ifdown-ippp  ifdown-sit     ifup-bnep        ifup-plip   ifup-Team      network-functions-ipv6
ifcfg-lo     ifdown-ipv6  ifdown-Team    ifup-eth         ifup-plusb  ifup-TeamPort
[webusr@iomweb1 network-scripts]$ 

命令别名

别名使用:为使用频率较高的复杂命令行设置简短的调用名称
存放位置:~/.bashrc #放到这里永久生效
查看命令别名:alias [别名]
设置命令别名:alias 别名=\'实际执行的命令\'
取消已设置的命令别名:unalias 别名

<bash-3.2>inas@44-_-[/inas/inas/dream]# ddd bash: ddd: command not found <bash-3.2>inas@44-_-[/inas/inas/dream]# alias ddd=\'df -m\' #定义别名 <bash-3.2>inas@44-_-[/inas/inas/dream]# ddd #使用别名 Filesystem 1M-blocks Used Available Use% Mounted on /dev/hd4 4096 66 4031 2% / /dev/hd2 6144 2509 3636 41% /usr /dev/hd9var 4096 813 3284 20% /var /dev/hd3 10240 6413 3828 63% /tmp /dev/hd1 5120 2414 2707 48% /home /proc - - 0 - /proc /dev/hd10opt 2048 448 1601 22% /opt /dev/lv_oracle 20480 5994 14487 30% /oracle /dev/lv_csm 10240 42 10199 1% /csm /dev/lv_inas 40960 32085 8876 79% /inas <bash-3.2>inas@44-_-[/inas/inas/dream]# unalias ddd #卸除别名 <bash-3.2>inas@44-_-[/inas/inas/dream]# ddd bash: ddd: command not found <bash-3.2>inas@44-_-[/inas/inas/dream]# alias #查看系统自定义及默认的别名信息 alias ll=\'ls -al\' alias ls=\'/usr/linux/bin/ls --color=auto\' alias vi=\'/opt/freeware/bin/vim\' <bash-3.2>inas@44-_-[/inas/inas/dream]#

输出重定向:对处理结果进行再次处理 

重定向存储记录
<bash-3.2>inas@44-_-[/inas/inas/dream]# ls / >root.txt <bash-3.2>inas@44-_-[/inas/inas/dream]# ls -lrt total 8 -rwxr-xr-x 1 inas inas 128 Mar 6 19:37 for.sh -rw-r--r-- 1 inas inas 206 Mar 7 15:03 root.txt <bash-3.2>inas@44-_-[/inas/inas/dream]# cat root.txt INAS Mail TT_DB audit bin bosinst.data<bash-3.2>inas@44-_-[/inas/inas/dream]#

bash的重定向操作:改变标准输入、标准输出、标准错误的方向
  1>>正确时输出,>和>>默认是1(正确时输出)
  2>>错误时输出
  &> 正确、错误 时都输出
  bash red.sh 1>> net.txt 2 >&1 用bash解释器运行red.sh正确(1)结果输入net.txt,并将错误(2)结果重定向给net.txt中。

管道操作“|”和grep(grep -i 忽略大小写):把前边的值赋值给后边的运算

<bash-3.2>inas@44-_-[/inas/inas/dream]# df -m|grep inas
/dev/lv_inas             40960     33874      7087  83% /inas
<bash-3.2>inas@44-_-[/inas/inas/dream]# df -m|grep inas|awk \'{print $4}\'
7087
<bash-3.2>inas@44-_-[/inas/inas/dream]# df -m|grep inas|awk \'{print $2,$3,$4}\'
40960 33875 7086
<bash-3.2>inas@44-_-[/inas/inas/dream]# df -m|grep -i inas|awk \'{print "total:\n"$2"\n"$3"\n"$4}\'
total:
40960
33877
7084
<bash-3.2>inas@44-_-[/inas/inas/dream]# df -m|grep -i inas|awk \'{print "total:"$2"\nuse:"$3"\nfree:"$4}\'
total:40960
use:33879
free:7082
<bash-3.2>inas@44-_-[/inas/inas/dream]# 

使用管道批量杀进程

grep -v 反向查找,例如grep -v grep 查找不含"grep"的内容

批量杀进程
ps -ef | grep java|grep -v grep | awk \'{print $2}\'|xargs kill -9 
ps -ef | grep java  |grep "=vociedmin" | grep -v grep | awk \'{print $2}\'|xargs kill -9   ---管理
ps -ef | grep java  |grep "NodeManager" | grep -v grep | awk \'{print $2}\'|xargs kill -9   ---节点

efile92@iomitfdb2:/interface/contabfile/exceptiondeal >ls -l|grep exception
-rw-r----- 1 efile92 jiekou 50 Mar 14 18:10 p_deal_exception.log
-rwxr-xr-x 1 efile92 jiekou 703 Nov 11 2016 p_deal_exception.sh
-rw-r----- 1 efile92 jiekou 1348 Mar 14 17:51 p_deal_exception_hour.log
-rwxr-x--- 1 efile92 jiekou 702 Mar 14 16:52 p_deal_exception_hour.sh
efile92@iomitfdb2:/interface/contabfile/exceptiondeal >ls -l|grep exception|grep -v p_deal_exception_hour.sh
-rw-r----- 1 efile92 jiekou 50 Mar 14 18:10 p_deal_exception.log
-rwxr-xr-x 1 efile92 jiekou 703 Nov 11 2016 p_deal_exception.sh
-rw-r----- 1 efile92 jiekou 1348 Mar 14 17:51 p_deal_exception_hour.log
efile92@iomitfdb2:/interface/contabfile/exceptiondeal >
efile92@iomitfdb2:/interface/contabfile/exceptiondeal >
efile92@iomitfdb2:/interface/contabfile/exceptiondeal >ls -l|grep exception|grep -v log
-rwxr-xr-x 1 efile92 jiekou 703 Nov 11 2016 p_deal_exception.sh
-rwxr-x--- 1 efile92 jiekou 702 Mar 14 16:52 p_deal_exception_hour.sh
efile92@iomitfdb2:/interface/contabfile/exceptiondeal >

查看IP信息

Aix系统命令ifconfig -a,Linux系统命令ifconfig

<bash-3.2>inas@44-_-[/inas/inas/dream]# ifconfig -a en0: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),PSEG,LARGESEND,CHAIN> inet 10.193.139.38 netmask 0xffffffc0 broadcast 10.193.139.63 inet 10.193.139.44 netmask 0xffffffc0 broadcast 10.193.139.63 tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0 en4: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN> inet 192.168.1.143 netmask 0xffffff00 broadcast 192.168.1.255 lo0: flags=e08084b<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT> inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255 inet6 ::1/0 tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1 <bash-3.2>inas@44-_-[/inas/inas/dream]#

更改IP地址:

临时(服务器重启后失效):ifconfig eth0 192.168.100.3

永久(修改网卡,重启系统后生效):
vi  /etc/sysconfig/network-scripts/ifcfg-eth0
或:
[webusr@iomweb1 network-scripts]$ cat /etc/sysconfig/network-scripts/ifcfg-bond0 DEVICE=bond0 TYPE=bonding ONBOOT=yes BOOTPROTO=none IPADDR=132.78.140.16 NETMASK=255.255.255.192 GATEWAY=132.78.140.1 USERCTL=no BONDING_OPTS="mode=1 miimon=100" [webusr@iomweb1 network-scripts]$

安装包:yum -y install httpd* #yum自动识别并安装httpd相关的包
启动服务:service httpd start
重启服务:service httpd restart
停止服务:service httpd stop
查看挂载信息、磁盘信息:df -th、df -k/m/g、du -k/m/g

二、Shell文件权限和脚本执行

4、认识权限和用户管理

查看文件属性:ls -l file
权限类型:
rwx 读,写,执行
-rw-r--r-- 1 root root 41 Jul 19 10:49 file
#root用户对file具有rw权限
#root组其他用户对file具有r权限
#other其他所有人对file具有r权限
#第一个root是创建file文件的所有者
#第二个root是创建file文件的所属组

<bash-3.2>inas@44-_-[/inas/inas/dream]# ll  
total 12
drwxr-xr-x   3 inas inas  256 Mar  7 18:42 .
drwxr-xr-x  28 inas inas 4096 Mar  7 17:18 ..
-rwxr-xr-x   1 inas inas  128 Mar  6 19:37 for.sh
-rw-r--r--   1 inas inas  206 Mar  7 15:03 root.txt
drwxr-xr-x   2 inas inas  256 Mar  7 18:42 test    #d表示目录,即directory
<bash-3.2>inas@44-_-[/inas/inas/dream]#  

 Linux权限:

1.r 读
2.w 写
3.x 执行

Linux用户:

1.所有者(u)
2.所属组(g)
3.其他用户(o)
4.所有用户(a)

文件权限:

--rw-r--r-- 1 root root 0 Oct 19 12:21 shell.txt
1.所有者(root用户)对shell.txt具有rw(读写)的权限
2.所属组(root组内用户)对shell.txt具有r(只读)的权限
3.其他用户(root以外用户)对shell.txt具有r(只读)的权限

用户管理:

1.查看用户:id user1,例如 id root 查看root用户信息
2.用户添加:useradd user1
3.用户删除:userdel -r user1
4.修改密码:passwd user1

inas@jm_csminf2:/inas/inas/dream >id inas  #查看ians用户组信息
uid=202(inas) gid=206(inas) groups=1(staff)
inas@jm_csminf2:/inas/inas/dream >
<bash-3.2>inas@44-_-[/inas/inas/dream]# cat /etc/passwd  #查看系统用户信息
root:!:0:0::/:/usr/bin/ksh
daemon:!:1:1::/etc:
bin:!:2:2::/bin:
sys:!:3:3::/usr/sys:
adm:!:4:4::/var/adm:
guest:!:100:100::/home/guest:
oracle:!:1000:1::/home/oracle:/usr/bin/ksh
admin1:!:203:4::/home/admin1:/usr/bin/ksh
csm:!:300:1::/home/csm:/usr/bin/ksh
inas:!:202:206::/inas/inas:/usr/bin/ksh
mysql:*:205:203::/home/mysql:/usr/bin/ksh
bj-4a:!:40233:4023::/home/bj-4a:/usr/bin/rksh
sshd:*:206:205::/var/empty:/usr/bin/ksh

<bash-3.2>inas@44-_-[/inas/inas/dream]# cat /etc/group  #查看系统用户组信息
system:!:0:root,esaadmin
staff:!:1:ipsec,esaadmin,oracle,admin1,csm,inas,oscheck,mysql,bj-4a,sshd
bin:!:2:root,bin
sys:!:3:root,bin,sys
adm:!:4:bin,adm,admin1,oscheck
usr:!:100:guest
dba:!:1000:oracle
hagsuser:!:1001:oracle
csm:!:300:csm
inas:!:206:inas
mysql:!:203:mysql
bj4a:!:4023:bj-4a
sshd:!:205:sshd
<bash-3.2>inas@44-_-[/inas/inas/dream]# useradd user1      #增加用户
<bash-3.2>inas@44-_-[/inas/inas/dream]# userdel -r user1   #删除用户
#建完用户后,会分别在home、passw、group下新增信息
<bash-3.2>inas@44-_-[/inas/inas/dream]# ls /home   
admin1  guest  inas  oracle
<bash-3.2>inas@44-_-[/inas/inas/dream]# cat /etc/passwd  #存用户的信息
user1:x:500:500::/home/user1:/bin/bash
<bash-3.2>inas@44-_-[/inas/inas/dream]# cat /etc/group  #存用户的组信息
user1:x:500:
<bash-3.2>inas@44-_-[/inas/inas/dream]# cat /etc/shadow  #存用户的密码,两个感叹号!表示用户密码,这里没有设置密码
user1:!:16362:0:99999:7:::
<bash-3.2>inas@44-_-[/inas/inas/dream]# passwd user1  #修改用户密码为123
<bash-3.2>inas@44-_-[/inas/inas/dream]# cat /etc/shadow
user1:$1$3zu3p/Jz$UGxL1jcuTnKUg6.CCXjvl1:16362:0:99999:7:::

普通用户的家目录都是在"/home/用户"目录下,root用户的家目录在/root/下

用户与组:

1.新建组:groupadd grp1
2.删除组:groupdel grp1
3.把用户加入组:gpasswd -a user1 root
4.把组中用户删除:gpasswd -d user1 root

<bash-3.2>inas@44-_-[/inas/inas/dream]# useradd user1
<bash-3.2>inas@44-_-[/inas/inas/dream]# id user1
uid=500(user1) gid=500(user1) groups=500(user1)
<bash-3.2>inas@44-_-[/inas/inas/dream]# gpasswd -a user1 root #将user1加入到root组
Adding user user1 to group root
<bash-3.2>inas@44-_-[/inas/inas/dream]# id user1  #user1用户属于user1组、和root组
uid=500(user1) gid=500(user1) groups=500(user1),0(root)
<bash-3.2>inas@44-_-[/inas/inas/dream]# gpasswd -d user1 root #将user1从root组删除
Removing user user1 to group root
<bash-3.2>inas@44-_-[/inas/inas/dream]# id user1
uid=500(user1) gid=500(user1) groups=500(user1)

5、chmod权限分配

用户文件关系-权限
1.chmod:
  读 :r 4
  写 :w 2
  执行:x 1
  chmod 755 file #需要三个类型一起授权,u(当前用户)为7,g(当前组)为5,o(其他用户)为5
2.acl
3.sudo 用户对脚本、应用程序

<bash-3.2>inas@44-_-[/inas/inas/dream]# touch root.txt
<bash-3.2>inas@44-_-[/inas/inas/dream]# chmod o+w root.txt  #授权给root外其他用户
<bash-3.2>inas@44-_-[/inas/inas/dream]# ll
total 4
-rw-r--rw- 2 root root 93 Oct 19 13:43 root.txt
<bash-3.2>inas@44-_-[/inas/inas/dream]# chmod o-w root.txt   #收回对root外其他用户写root.txt的权限
<bash-3.2>inas@44-_-[/inas/inas/dream]# ll
total 4
-rw-r--r- 2 root root 93 Oct 19 13:43 root.txt
<bash-3.2>inas@44-_-[/inas/inas/dream]# chmod g+w root.txt  #给所属组(root)授权写root.txt的权限
<bash-3.2>inas@44-_-[/inas/inas/dream]# ll
total 4
-rw-rw-r- 2 root root 93 Oct 19 13:43 root.txt
<bash-3.2>inas@44-_-[/inas/inas/dream]# gpassd -a user1 root  #将user1加入到root组
<bash-3.2>inas@44-_-[/inas/inas/dream]#id user1
uid=500(user1) gid=500(user1) groups=500(user1),0(root)
<bash-3.2>inas@44-_-[/inas/inas/dream]# chmod o+w,o+x root.txt #同时授多个权限
<bash-3.2>inas@44-_-[/inas/inas/dream]# chmod a+x root.txt #a表示所有用户,给所有用户都授x权限
<bash-3.2>inas@44-_-[/inas/inas/dream]# ll
total 4
-rwxrwxr-x 2 root root 93 Oct 19 13:43 root.txt

6、acl权限分配

acl的权限控制

【如果是文件内容,直接对文件进行权限操作,如果是文件本身,只能对文件所在的目录进行权限操作】
解决不同用户或组对统一文件不同权限的处理。
1.设置权限:setfacl -m u:user1:rwx /test
2.查看权限:getfacl /test
3.删除user1在/test上的权限:setfacl -x u:user1 /test
4.删除/test上所有acl权限:setfacl -b /test
5.设置acl的默认权限:setfacl -m d:u:user1:rwx test
#当前目录的子目录会继承目录的acl权限
6.创建和删除文件权限:需要对目录设置acl权限即可
[webusr@iomweb1 dream]$ setfacl -m u:iomdicp:r /mnt
7.如何对目录以及子目录和文件设置acl权限(递归)
[webusr@iomweb1 dream]$ setfacl -m u:iomdicp:r -R /mnt
8.目录中后期添加的子目录和文件如何继承父目录的权限
[webusr@iomweb1 dream]$ setfacl -m u:iomdicp:r -R /mnt #对目录及子目录进行授权(递归)
[webusr@iomweb1 dream]$ setfacl -m d:u:iomdicp:r -R /mnt #设置默认权限

[webusr@iomweb1 dream]$ touch root.txt  
[webusr@iomweb1 dream]$ ll
总用量 0
-rw-r-----. 1 webusr webgrp 0 3月  11 12:44 root.txt
[webusr@iomweb1 dream]$ getfacl root.txt   #查看权限
# file: root.txt
# owner: webusr
# group: webgrp
user::rw-
group::r--
other::---
[webusr@iomweb1 dream]$ setfacl -m u:test:rw root.txt  #如果所授权用户不存在,则报错
setfacl: Option -m: 无效的参数 near character 3
[webusr@iomweb1 dream]$ setfacl -m u:iomdicp:rw root.txt  #授权:将root.txt文件授予iomdicp用户rw权限
[webusr@iomweb1 dream]$ ll
总用量 4
-rw-rw----+ 1 webusr webgrp 0 3月  11 12:44 root.txt
[webusr@iomweb1 dream]$ getfacl root.txt 
# file: root.txt
# owner: webusr
# group: webgrp
user::rw-
user:iomdicp:rw-
group::r--
mask::rw-
other::---
[webusr@iomweb1 dream]$ setfacl -x user:iomdicp root.txt #收回权限:收回root.txt对iomdicp授予的所有权限,如果只是部分收回,用授权的命令修改权限
[webusr@iomweb1 dream]$ getfacl root.txt 
# file: root.txt
# owner: webusr
# group: webgrp
user::rw-
group::r--
mask::r--
other::---
[webusr@iomweb1 dream]$ ll
总用量 4
-rw-r----- 1 webusr webgrp 0 3月  11 12:44 root.txt
[webusr@iomweb1 dream]$ setfacl -m u:iomdicp:r /mnt #对目录进行授权
[webusr@iomweb1 dream]$ setfacl -m u:iomdicp:r -R /mnt #对目录及子目录进行授权(递归)
[webusr@iomweb1 dream]$ setfacl -m d:u:iomdicp:r -R /mnt #设置默认权限

sudo授权

visudo,对应用程序或命令进行权限控制
需要密码:user1 localhost=/usr/sbin/useradd
不需要密码:user1 ALL=NOPASSWD:/usr/bin/passwd

设置用户命令的执行权限-visudo

1.设置
visudo
user4 localhost=/usr/sbin/useradd
或
user4 localhost=/usr/sbin/useradd,/usr/sbin/userdel
2.使用有密码sudo授权命令
sudo /usr/sbin/useradd user5  #增加用户
sudo /usr/sbin/useradd -r user5 #删除用户
id user5  #查看用户信息
3.使用无密码的sudo授权命令
user5 localhost=NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel
或
user5 ALL=NOPASSWD: /usr/sbin/useradd,/usr/sbin/userdel

7、脚本执行和编写

shell脚本的概念:
1.用途:完成特定的、较复杂的系统管理任务
2.格式:集中保存多条Linux命令,普通文本文件
3.执行方式:按照预设的顺序依次解释执行

建立包含执行语句的脚本文件
  #脚本文件中包含的内容

  • 运行环境设置:#!/bin/bash
  • 注释信息:以#开始的说明性文字
  • 可执行的Linux命令行

为脚本文件添加可执行权限

 

执行shell脚本的方式:

1.bash test.sh

#不需要解析器

#不需要给脚本设置执行权限

2../test.sh

#需要写解析器

#需要给脚本设置执行权限

 

shell脚本小例子:

#!/bin/bash
#for.sh

echo \'dick space\'
echo
df -m
echo 
echo \'free space\'
echo
free -m
echo 
echo \'user:\'
for i in `ls /home`
do
    id -u $i
done

for (( i = 0; i < 10; i++ )); do
    #statements
    echo $i
done

 

ls -lhR 查看目录详细信息,并以树形结构展示。

<bash-3.2>inas@44-_-[/inas/inas/dream]# ls -lhR
.:
total 8.0K
drwxr-xr-x  2 inas inas 256 Mar 11 14:00 a
-rwxr-xr-x  1 inas inas 205 Mar 11  2019 for.sh
-rw-r--r--  1 inas inas 206 Mar  8 17:38 root.txt
drwxr-xr-x  2 inas inas 256 Mar  7 18:42 test

./a:
total 0

./test:
total 0

三、Shell变量类型和运算符

8、变量的定义和使用

Shell变量的种类
用户自定义变量:由用户自己定义、修改和使用
预定义变量:Bash预定义的特殊变量,不能直接修改
位置变量:通过命令行给程序执行参数

 

定义新的变量:

变量名要以英文字母或下划线开头,区分大小写
格式:变量名=变量值
查看变量的值:echo $变量名

 

<bash-3.2>inas@44-_-[/inas/inas/dream]# day=sunday
<bash-3.2>inas@44-_-[/inas/inas/dream]# echo $day
sunday
<bash-3.2>inas@44-_-[/inas/inas/dream]# echo ${day}
sunday
<bash-3.2>inas@44-_-[/inas/inas/dream]# echo "The Today is ${day}dd"
The Today is sundaydd
<bash-3.2>inas@44-_-[/inas/inas/dream]#

从键盘输入内容为变量值:

格式:read [-p "信息"] 变量名
结合不通的引号为变量赋值:
双引号"":允许通过$符号应用其他变量值
单引号\'\':禁止应用其他变量值,$视为普通字符
反撇号``:将命令执行的结果输出给变量
单双引号是不能解析转义字符/n 、/t,例如:echo "$name \n"或echo \'$name \n\'

[webusr@iomweb1 dream]$ ls
test.sh
[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#tets.sh
#name="dream"
read -p "please input your name:" name

echo "my name is $name"
echo "my name is ${name}"

[webusr@iomweb1 dream]$ sh test.sh 
please input your name:dream
my name is dream
my name is dream
[webusr@iomweb1 dream]$ 

 

删除变量:unset name

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#tets.sh
#name="dream"
read -p "please input your name:" name

echo "my name is $name"
unset name
echo "my name is ${name}"

[webusr@iomweb1 dream]$ sh test.sh 
please input your name:dream
my name is dream
my name is 
[webusr@iomweb1 dream]$ 

 

9、位置变量、预定义变量和运算符

位置变量(最多可以接收9个位置参数):表示$n,n为1~9之间的数字
sh test.sh one two three four five six
case相当于switch

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#tets.sh

echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo $10
[webusr@iomweb1 dream]$ sh test.sh q w e r t y u i o
q
w
e
r
t
y
u
i
o
q0
[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#tets.sh
case $1 in
        start )
                echo \'start...\'
                ;;
        stop )
                echo \'stop...\'
                ;;
esac[webusr@iomweb1 dream]$ sh test.sh stop
stop...
[webusr@iomweb1 dream]$ 

 

数学运算

计算整数表达式的运算结果:
格式:expr 变量1 运算符 变量2 …[运算符 变量n],也可以用双括号(())来表示
expr的常用运算符:
  加法:+
  减法:-
  乘法:\*
  除法:/
  求模(取余)运算:%

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#tets.sh

echo $(($1+$2))
expr $1 + $2[webusr@iomweb1 dream]$ sh test.sh 10 20
30
30
[webusr@iomweb1 dream]$ expr 10 + 20
30
[webusr@iomweb1 dream]$ 

 

[webusr@iomweb1 dream]$ expr 4 + 2 - 1
5
[webusr@iomweb1 dream]$ expr 5 % 2
1
[webusr@iomweb1 dream]$ expr 4 \* 3
12
[webusr@iomweb1 dream]$ expr 7 / 3
2
[webusr@iomweb1 dream]$ 

 

预定义变量
表示形式如下:
$#:命令行中位置参数的个数
$*:所有位置参数的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
$0:当前执行的进程名

[webusr@iomweb1 dream]$ ./test.sh 
./test.sh
[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#tets.sh

echo "当前进程名称:"$0
echo "命令行中位置参数的个数:" $#
echo "所有位置参数的内容:" $*
echo "上一条命令执行后返回的状态,0为正常,非0标识异常或出错:" $?

tot=0

for i in $*; do
         tot=$(($tot + $i))
done
echo "程序$0共$#个参数($*)的和:"$tot
[webusr@iomweb1 dream]$ sh test.sh 22 7 13
当前进程名称:test.sh
命令行中位置参数的个数: 3
所有位置参数的内容: 22 7 13
上一条命令执行后返回的状态,0为正常,非0标识异常或出错: 0
程序test.sh共3个参数(22 7 13)的和:42
[webusr@iomweb1 dream]$ cat test.sh #!/bin/bash #tets.sh for i in $*; do echo $i sleep 1 done [webusr@iomweb1 dream]$ sh test.sh 4 7 2 4 7 2 [webusr@iomweb1 dream]$

判断语句:

[webusr@iomweb1 dream]$ 
#!/bin/bash
#tets.sh
ls
if [[ $? == 0 ]]; then
        echo "上条命令执行成功"
else
        echo "上条命令执行失败"
fi
[webusr@iomweb1 dream]$ sh test.sh 
test.sh
上条命令执行成功

[webusr@iomweb1 dream]$ sh test.sh 
test.sh:行4: luuuus: 未找到命令
上条命令执行失败

四、Shell输入和输出功能

10、Shell输入、输出功能和字符颜色设置

1)Shell输入、输出

#!/bin/bash
#test.sh

#-e可以解析字符串中的转义字符(但是最后一次执行完还要再换一行),否则\n单独不能实现换行
echo "my name is user123" #普通输出
echo -e "my name is user123\n my name is user456" 

#-n去掉换行,不能带键盘的输入,如果需要获取键盘输入,需要用read单独处理
echo -n "please input your name:" 
read name
echo "keybord input1:"$name

#-p 在一行实现提示,获取键盘输入,并赋给变量
read -p \'please input your name:\' name
echo "keybord input2:"$name

#echo 输出空行
echo
echo \'########\' 

其他输出命令:
cat 查看,预定义格式化输出

[webusr@iomweb1 dream]$ ls
test.sh
[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

cat << x
please choose your name:
    1)user1
    2)user2
    3)user3
    4)user4
x
[webusr@iomweb1 dream]$
sh test.sh please choose your name: 1)user1 2)user2 3)user3 4)user4 [webusr@iomweb1 dream]$

tee 输出一份并且保存一份,在前面程序执行的输出另存为新的文件中。

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

cat << x
please choose your name:
    1)user1
    2)user2
    3)user3
    4)user4
x
[webusr@iomweb1 dream]$ [webusr@iomweb1 dream]$ .
/test.sh |tee menu.txt please choose your name: 1)user1 2)user2 3)user3 4)user4 [webusr@iomweb1 dream]$ cat menu.txt please choose your name: 1)user1 2)user2 3)user3 4)user4 [webusr@iomweb1 dream]$ ls menu.txt test.sh [webusr@iomweb1 dream]$ ls |tee tt.txt menu.txt test.sh [webusr@iomweb1 dream]$ cat tt.txt menu.txt test.sh [webusr@iomweb1 dream]$

more 分页查看,即超过文本超过一页,则逐页读取

[webusr@iomweb1 dream]$ cat /etc/passwd |more
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
--More--

head,默认查看前10行,如果后面跟参数,表示查看前面n行。

[webusr@iomweb1 ~]$ cat /etc/passwd |head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[webusr@iomweb1 ~]$ cat /etc/passwd |head -2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[webusr@iomweb1 ~]$ 

tail 默认查看后十行,如果后面跟参数,表示查看最后n行

[webusr@iomweb1 ~]$ cat /etc/passwd |tail
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
oprofile:x:16:16:Special user account to be used by OProfile:/var/lib/oprofile:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin
admin1:x:1000:1000:admin1:/home/admin1:/bin/bash
webusr:x:501:501::/home/webgrp:/bin/bash
weblogic:x:502:502::/bea:/bin/bash
oscheck:x:202:4::/home/oscheck:/bin/bash
bj-4a:x:40233:4023::/home/bj-4a:/bin/rbash
sisips:x:40234:4024:SDCSS_User:/opt/Symantec/sdcssagent/IPS:/bin/sh
iomdicp:x:40235:40235::/home/iomdicp:/bin/bash
[webusr@iomweb1 ~]$ cat /etc/passwd |tail -2
sisips:x:40234:4024:SDCSS_User:/opt/Symantec/sdcssagent/IPS:/bin/sh
iomdicp:x:40235:40235::/home/iomdicp:/bin/bash
[webusr@iomweb1 ~]$ 

nl 给输出增加行号

nl /etc/passwd >>mypass.txt 给输出加上行号,并输出到mypass.txt文件中

[webusr@iomweb1 dream]$ cat /etc/passwd |head|nl
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  operator:x:11:0:operator:/root:/sbin/nologin
[webusr@iomweb1 dream]$ ls |nl
     1  menu.txt
     2  test.sh
     3  tt.txt
[webusr@iomweb1 dream]$ nl test.sh 
1 #!/bin/bash
2 #test.sh

3 cat << x
4 please choose your name:
5 1)user1
6 2)user2
7 3)user3
8 4)user4
9 x
[webusr@iomweb1 dream]$

2)颜色

CRT设置,默认CRT是黑白模式:
1、点击"选项"(Options)-"全局选项"(Global options)
2、左边选择"默认会话"(Default Session)
3、右边选择"编辑默认设置"(Edit default setting)
4、左边选择"外观"(Appearance)
5、右边的"当前颜色方案"(Current color scheme),选择"Traditional",确定
6、弹出的对话框选择"是"(yes)保存为默认配置。
7、以后再创建新的会话就会使用Traditional颜色方案了。

颜色设置格式
\033[前景颜色;背景颜色m]    前景颜色 和 背景颜色的顺序可以倒换
\033[0m] 表示恢复到系统默认颜色,否则前面的设置会影响后续的显示

例如:echo -e "\033[32;47m[my name is dream.]\033[0m"
解读:-e用来识别转义字符\上面语句前景色32绿色,背景色47白色,最后要重置系统默认颜色\033[0m,

前景颜色编码:
30 黑色,31 红色,32 绿色,33 棕色,34 蓝色,35 紫色,36 青色,37 白色,0 重置
背景颜色编码:
40 黑色,41 红色,42 绿色,43 棕色,44 蓝色,45 紫色,46 青色,47 白色

echo -e "\033[43;35m david use echo say Hello World \033[0m \n" 
printf "\033[44;36m david use printf say Hello World \033[0m \n" 
echo -e "\033[47;30;5m david use echo say \033[0m Hello World \n"

#一些设置字体颜色的命令如下: echo -e "\033[0m none \033[0m" echo -e "\033[30m black \033[0m" echo -e "\033[1;30m dark_gray \033[0m" echo -e "\033[0;34m blue \033[0m" echo -e "\033[1;34m light_blue \033[0m" echo -e "\033[0;32m green \033[0m" echo -e "\033[1;32m light_green \033[0m" echo -e "\033[0;36m cyan \033[0m" echo -e "\033[1;36m light_cyan \033[0m" echo -e "\033[0;31m red \033[0m" echo -e "\033[1;31m light_red \033[0m" echo -e "\033[0;35m purple \033[0m" echo -e "\033[1;35m light_purple \033[0m" echo -e "\033[0;33m brown \033[0m" echo -e "\033[1;33m yellow \033[0m" echo -e "\033[0;37m light_gray \033[0m" echo -e "\033[1;37m white \033[0m" echo -e "\033[0m none \033[0m" echo -e "\033[0m none \033[0m" echo -e "\033[0m none \033[0m" echo -e "\033[0m none \033[0m" echo -e "\033[0m none \033[0m" echo -e "\033[40;37m 黑底白字 \033[0m" echo -e "\033[41;30m 红底黑字 \033[0m" echo -e "\033[42;34m 绿底蓝字 \033[0m" echo -e "\033[43;34m 黄底蓝字 \033[0m" echo -e "\033[44;30m 蓝底黑字 \033[0m" echo -e "\033[45;30m 紫底黑字 \033[0m" echo -e "\033[46;30m 天蓝底黑字 \033[0m" echo -e "\033[47;34m 白底蓝字 \033[0m" echo -e "\033[4;31m 下划线红字 \033[0m" echo -e "\033[5;31m 红字在闪烁 \033[0m" echo -e "\033[8m 消隐 \033[0m " 

五、Shell条件测试和流程控制

11、文件测试和整型测试

1)shell条件测试,条件测试的操作

test命令:
  用户:测试特定的表达式是否成立,当条件成立时,命令执行后的返回值为0,否则为其他数值
  格式:test 条件表达式

测试文件状态:

  格式:[操作符 文件或目录]
  常用的测试操作符:
  -d:测试是否为目录(Directory)

[webusr@iomweb1 dream]$ [ -d /etc ]
[webusr@iomweb1 dream]$ echo $?
0
[webusr@iomweb1 dream]$ 

  -e:测试目录或文件是否存在(Exist)
  -f:测试是否为文件(File)

[webusr@iomweb1 dream]$ ls
menu.txt  test.sh
[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh
if [ -f ./file1 ]; then
        echo "file is exists!"
else
        echo "file is not exists!"
fi[webusr@iomweb1 dream]$ sh test.sh 
file is not exists!
[webusr@iomweb1 dream]$ touch file1
[webusr@iomweb1 dream]$ sh test.sh 
file is exists!
[webusr@iomweb1 dream]$ 

  -r:测试当前用户是否有权限读取(Read)
  -w:测试当前用户是否有权限写入(Write)
  -x:测试当前用户是否可执行(Excute)该文件
  -L:测试是否为符号连接(Link)文件

2)整数值比较
  格式:[整数1 操作符 整数2]
  常用的测试操作符:
  -eq:等于(Equal)
  -ne:不等于(Not Equal)
  -gt:大于(Greater Than)
  -lt:小于(Lesser Than)
  -le:小于或等于(Less or Equal)
  -ge:大于或等于(Greater or Equal)

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh
age=30
if [ $age -ge 18 ];then
        echo "已成年"
else
        echo "未成年"
fi
[webusr@iomweb1 dream]$ sh test.sh 
已成年
[webusr@iomweb1 dream]$ 

12、字符串测试和逻辑测试

1)字符串比较

字符串内容相同:str1 = str2
字符串内容不相同:str != str2
字符串内容为空:-z str1

登录校验示例:

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh
read -p \'name:\' name
read -p \'pass:\' pass

if [ $name = \'admin\' ] && [ $pass = \'123\' ]
then
        echo "登录成功!"
else
        echo \'登录失败!\'
fi
[webusr@iomweb1 dream]$ sh test.sh 
name:admin
pass:123
登录成功!
[webusr@iomweb1 dream]$ sh test.sh 
name:dream
pass:123
登录失败!
[webusr@iomweb1 dream]$ 

 查看当前系统登录的用户数,$? 返回上一条命令的执行结果

[webusr@iomweb1 dream]$ who
admin1   :0           2016-09-29 17:39 (:0)
webusr   pts/1        2019-03-18 12:18 (132.77.255.145)
admin1   pts/0        2016-09-29 17:39 (:0)
[webusr@iomweb1 dream]$ who |wc -l
3[webusr@iomweb1 dream]$ [ `who |wc -l` -ge 1 ]
[webusr@iomweb1 dream]$ echo $?  #标识上一条命令的执行结果
0
[webusr@iomweb1 dream]$ 

 监控并发送邮件,主题“boot space warning”,查看邮件接收情况mail

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

bootspace=` df -Th|grep boot|awk \'{print $6}\'|cut -d \'%\' -f1`
if [ $bootspace -ge 50 ];then
        echo "boot space greater than 50%" |mail -s \'boot space warning\' root@localhost
else
        echo "boot space less than 50%"
fi

[webusr@iomweb1 dream]$ sh test.sh 
boot space greater than 50%

这里使用grep、awk、cut,表示查看boot目录的空间使用率,以%分隔,返回第一部分

[webusr@iomweb1 dream]$ ls
file1 menu.txt test.sh
[webusr@iomweb1 dream]$ df -Th|grep boot/dev/sda1 
ext4 190M 102M 74M 58% /boot [webusr@iomweb1 dream]$ df -Th|grep boot|awk \'{print $6}\'
58% [webusr@iomweb1 dream]$ df -Th|grep boot|awk \'{print $6}\'|cut -d \'%\' -f1
58 [webusr@iomweb1 dream]$

cut -d \':\' -f2 以:分隔,返回第二部分

[webusr@iomweb1 dream]$ ls -l
总用量 8
-rw-r-----. 1 webusr webgrp  0 3月  18 12:35 file1
-rw-r-----. 1 webusr webgrp 73 3月  14 15:34 menu.txt
-rwxr-x---. 1 webusr webgrp 90 3月  18 12:57 test.sh
[webusr@iomweb1 dream]$ ls -l|grep test|awk \'{print $8}\'|cut -d \':\' -f2
57
[webusr@iomweb1 dream]$ 

2)逻辑测试 

-a 或 &&:逻辑与,“而且”的意思
-o或||:逻辑或,“或者”的意思
!=:逻辑否

[webusr@iomweb1 dream]$ [ -e /media/cdrom ] && echo "YES"
[webusr@iomweb1 dream]$ [ -e /bea/script ] && echo "YES"
YES
[webusr@iomweb1 dream]$   

13、流程判断

1)if分支结构语法:

if [逻辑判断] ;then
    ……
elsif [逻辑判断] then
    ……
else
    ……
fi

判断成绩等级:

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh
score=91
if [ $score -lt 60 ] ;then
        echo \'<60\'
elif [ $score -ge 60 ] && [ $score -lt 70 ] ;then
        echo \'60-70\'
elif [ $score -ge 70 ] && [ $score -lt 80 ] ;then
        echo \'70-80\'
elif [ $score -ge 80 ] && [ $score -lt 90 ] ;then
        echo \'80-90\'
elif 
        echo \'>90\'
fi[webusr@iomweb1 dream]$ sh test.sh 
>90
[webusr@iomweb1 dream]$ 

2)case分支结构语法 

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.shweek=`date +%w`

case $week in
        1)
                echo \'周一\'
                ;;
        2)
                echo \'周二\'
                ;;
        3)
                echo \'周三\'
                ;;
        *)
                echo "其他"
                ;;
esac

[webusr@iomweb1 dream]$ sh test.sh 
其他
[webusr@iomweb1 dream]$ 

14、循环控制

while、for

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

num=3
while [ $num -gt 0 ]
do
        tot=$(($tot+$num))
        num=$(($num-1))
done
echo $tot
[webusr@iomweb1 dream]$ sh test.sh 6 [webusr@iomweb1 dream]$

批量给user0-user10,修改密码。--stdin为标准输入。

#!/bin/bash
#test.sh

i=0
while [ $i -lt 10 ]
do
        echo \'123\'|passwd --stdin user$i
    i=$(($i+1))
done

while带if嵌套使用 

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

i=0
while [ $i -lt 6 ]
do
       if [ $((i%2)) -eq 0 ]
       then
                echo -e "\033[37;40m${i}\033[0m"
       else
                echo $i
       fi
       i=$(($i+1))
done
[webusr@iomweb1 dream]$ sh test.sh 
0
1
2
3
4
5
[webusr@iomweb1 dream]$ 

for in循环,由于是通过空格来识别的,所以可以通过读取文件内容的形式使用for in循环

#!/bin/bash
#test.sh

i=0
#for i in user1 user1 user3 for i in `cat user.txt` echo $i done

for in语句与awk配合使用

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh
for i in ` cat /etc/passwd|awk -F: \'{print $1}\' `
do
        echo $i
     echo $i >> user.txt  
done [webusr@iomweb1 dream]$ sh test.sh root bin daemon adm lp sync

15、循环把控和函数使用

 

#!/bin/bash
#test.sh

#批量新增用户并修改密码
for (( i = 0; i < 10; i++ )); do
    echo $i
    useradd user$i
    echo123 | passwd --stdin user$i
done

break

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

for (( i = 0; i < 10; i++ )); do
        echo $i
        if [[ $i -eq 5 ]]; then
                break
        fi
done
[webusr@iomweb1 dream]$ sh test.sh 
0
1
2
3
4
5
[webusr@iomweb1 dream]$ 

continue

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

for (( i = 0; i < 7; i++ )); do
        if [[ $i -eq 3 ]]; then
                echo 
                continue
        fi
        echo $i
done
[webusr@iomweb1 dream]$ sh test.sh 
0
1
2

4
5
6
[webusr@iomweb1 dream]$ 

练习:

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

read -p "Press some key,then press Return:" key
case "$key" in
        [a-z]|[A-Z])
                echo "It\'s a letter."
                ;;
        [0-9])
                echo "It\'s a digit."
                ;;
        *)
                echo "It\'s function keys,Spacebar or others keys."
esac[webusr@iomweb1 dream]$ sh test.sh 
Press some key,then press Return:7
It\'s a digit.
[webusr@iomweb1 dream]$ sh test.sh 
Press some key,then press Return:o
It\'s a letter.
[webusr@iomweb1 dream]$ sh test.sh 
Press some key,then press Return:3p
It\'s function keys,Spacebar or others keys.
[webusr@iomweb1 dream]$ 

shift迁移语句:
用于迁移位置变量,讲$1-$9依次向左传递
1.例如,若当前脚本程序获得的位置变量如下:$1=file1、$2=file2、$3=file3、$4=file4
2.则执行依次shift命令后,各位置变量为:$1=file2、$2=file3、$3=file4
3.再次执行shift命令后,各位置变量为:$1=file3、$2=file4

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

tot=0
while [ $# -gt 0 ]
do
        tot=$(($tot+$1))
        shift
done
        echo $tot
[webusr@iomweb1 dream]$ sh test.sh 
0
[webusr@iomweb1 dream]$ sh test.sh 10 20 30
60
[webusr@iomweb1 dream]$ sh test.sh 10 15 20
45
[webusr@iomweb1 dream]$ 

上面使用到了预定义变量,补充说明如下:
表示形式如下:
$#:命令行中位置参数的个数
$*:所有位置参数的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
$0:当前执行的进程名

Shell函数应用

定义新的函数(function可以省略):
function 函数名{
命令序列
}
函数名(){
命令序列
}
调用已定义的函数:函数名
向函数内传递参数:参数1 参数2 …

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

function add(){
        echo \'abcdefghijklmn\'
}
add
add
add
[webusr@iomweb1 dream]$ sh test.sh 
abcdefghijklmn
abcdefghijklmn
abcdefghijklmn
[webusr@iomweb1 dream]$ 

向函数传递1个参数

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

function add(){
        num=$1
        tot=0
        for((i=1;i<=$num;i++))
        do
                tot=$(($tot+$i))
        done
        echo $tot
}

add 3
add 6
add 10
add 100
add 200
[webusr@iomweb1 dream]$ sh test.sh 
6
21
55
5050
20100
[webusr@iomweb1 dream]$ 

向函数传递2个参数(数学运算,用两个小括号,或者用expr函数)

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

function add(){
        #tot=$(($1+$2))
        echo `expr $1 + $2`
        echo $tot
}

add 11 22
[webusr@iomweb1 dream]$ sh test.sh 33 [webusr@iomweb1 dream]$

六、Shell文件操作

16、Find查找命令详解 

find . -name "*.txt" 在当前目录下找文件名以txt结尾的文件【当前目录可以不用写点“·”】

##在当前目录下查找txt结尾的文件
[webusr@iomweb1 dream]$ ls test.sh [webusr@iomweb1 dream]$ touch file1.txt file2.txt file3.txt [webusr@iomweb1 dream]$ ls file1.txt file2.txt file3.txt test.sh [webusr@iomweb1 dream]$ find . -name \'*.txt\' ./file2.txt ./file3.txt ./file1.txt
##在当前目录下查找file0-file4开头的文件 [webusr@iomweb1 dream]$
ls file1.txt file2.txt file3.txt file4.doc file5.xls file6.ppt test.sh [webusr@iomweb1 dream]$ find . -name \'file[0-4]*\' ./file4.doc ./file2.txt ./file3.txt ./file1.txt [webusr@iomweb1 dream]$

find . -name "[a-z]*" 在当前目录下找文件名以所有字母开头的文件

##查找以字母开头的文件
[webusr@iomweb1 dream]$ find . -name \'[a-z]*\'
./file4.doc
./file6.ppt
./file2.txt
./file5.xls
./file3.txt
./file1.txt
./test.sh
[webusr@iomweb1 dream]$ 

find /etc -name "host*" 在/etc目录下找以host开头的文件

[webusr@iomweb1 dream]$ ls
test.sh
[webusr@iomweb1 dream]$ touch file1.txt file2.txt file3.txt
[webusr@iomweb1 dream]$ ls
file1.txt  file2.txt  file3.txt  test.sh
[webusr@iomweb1 dream]$ find . -name \'file*\'
./file2.txt
./file3.txt
./file1.txt
[webusr@iomweb1 dream]$ 

find . -perm 755 在当前目录下找属性为755的文件

[webusr@iomweb1 dream]$ ls
file1.txt  file2.txt  file3.txt  file4.doc  file5.xls  file6.ppt  test.sh
[webusr@iomweb1 dream]$ find . -perm 755
[webusr@iomweb1 dream]$ chmod +755 *doc
[webusr@iomweb1 dream]$ find . -perm 755
./file4.doc
[webusr@iomweb1 dream]$ 

find -user root 在当前目录下找属主为root的文件 

##按照属主查找
[webusr@iomweb1 dream]$ ls -l
总用量 4
-rw-r-----. 1 webusr webgrp   0 3ÔÂ  22 19:11 file1.txt
-rw-r-----. 1 webusr webgrp   0 3ÔÂ  22 19:09 file2.txt
-rw-r-----. 1 webusr webgrp   0 3ÔÂ  22 19:09 file3.txt
-rwxr-xr-x. 1 webusr webgrp   0 3ÔÂ  22 19:12 file4.doc
-rw-r-----. 1 webusr webgrp   0 3ÔÂ  22 19:12 file5.xls
-rw-r-----. 1 webusr webgrp   0 3ÔÂ  22 19:12 file6.ppt
-rwxr-x---. 1 webusr webgrp 106 3ÔÂ  22 19:08 test.sh
[webusr@iomweb1 dream]$ find -user webusr
.
./file4.doc
./file6.ppt
./file2.txt
./file5.xls
./file3.txt
./file1.txt
./test.sh
[webusr@iomweb1 dream]$ 

find /var -mtime -5 在/var下找更改时间为5天以内的文件

stat 目录  查看目录下文件的访问、更改、创建时间

[webusr@iomweb1 ~]$ ll
总用量 1177432
-rw-r--r--. 1 webusr webgrp     885513 3月  22 19:17 diskspace.log
-rw-r--r--. 1 webusr webgrp        121 5月  15 2017 diskspace.txt
-rw-r-----. 1 webusr webgrp   97388803 4月  18 2018 p27395085_1036_Generic.zip
-rw-r-----. 1 webusr webgrp   38876542 4月  18 2018 p27419391_121300_Generic.zip
-rw-r-----. 1 webusr webgrp          0 5月  25 2018 putcbssear.log
-rw-r-----. 1 webusr webgrp          0 5月  25 2018 putcbssorder.log
-rw-r-----. 1 webusr webgrp          0 2月  18 20:05 putcrmear.log
-rw-r-----. 1 webusr webgrp          0 5月  25 2018 putopearear.log
-rw-r-----. 1 webusr webgrp          0 5月  25 2018 putopearorder.log
-rw-r--r--. 1 webusr webgrp        584 5月  15 2017 server_monitor.txt
-rw-r-----. 1 webusr webgrp         42 5月  19 2016 startnode.sh
-rw-r-----. 1 webusr webgrp 1068506707 4月  23 2018 wls1036_generic.jar
drwxr-x---. 3 webusr webgrp       4096 12月 21 2016 xie
[webusr@iomweb1 ~]$ clear
[webusr@iomweb1 ~]$ cd /bea/script/iom/dream
[webusr@iomweb1 dream]$ ll
总用量 4
-rw-r-----. 1 webusr webgrp   0 3月  22 19:11 file1.txt
-rw-r-----. 1 webusr webgrp   0 3月  22 19:09 file2.txt
-rw-r-----. 1 webusr webgrp   0 3月  22 19:09 file3.txt
-rwxr-xr-x. 1 webusr webgrp   0 3月  22 19:12 file4.doc
-rw-r-----. 1 webusr webgrp   0 3月  22 19:12 file5.xls
-rw-r-----. 1 webusr webgrp   0 3月  22 19:12 file6.ppt
-rwxr-x---. 1 webusr webgrp 106 3月  22 19:08 test.sh
[webusr@iomweb1 dream]$ stat /bea/script/iom
  文件:"/bea/script/iom"
  大小:4096            块:8          IO 块:4096   目录
设备:fd03h/64771d      Inode:1048583     硬链接:5
权限:(0775/drwxrwxr-x)  Uid:(  502/weblogic)   Gid:(  502/weblogic)
环境:unconfined_u:object_r:etc_runtime_t:s0
最近访问:2019-03-22 13:48:43.621853260 +0800
最近更改:2019-03-11 12:40:48.677791072 +0800
最近改动:2019-03-11 12:40:48.677791072 +0800
创建时间:-
[webusr@iomweb1 dream]$ find /bea/script/iom -mtime +5
/bea/script/iom
/bea/script/iom/wfsapp
/bea/script/iom/wfsapp/process65
/bea/script/iom/wfsapp/process65/wfs.out
/bea/script/iom/wfsapp/process65/wfs.pid
/bea/script/iom/wfsapp/process65/wfs.sh
/bea/script/iom/wfsapp/process65/runwfs.sh
/bea/script/iom/monitor
/bea/script/iom/monitor/weblogic_domain.sh
/bea/script/iom/monitor/diskspace.txt
/bea/script/iom/monitor/diskspace.sh

find /var -mtime +3 在/var下找更改时间在3天以前的文件

[webusr@iomweb1 dream]$ find /bea/script/iom -mtime -3
/bea/script/iom/dream
/bea/script/iom/dream/file4.doc
/bea/script/iom/dream/file6.ppt
/bea/script/iom/dream/file2.txt
/bea/script/iom/dream/file5.xls
/bea/script/iom/dream/file3.txt
/bea/script/iom/dream/file1.txt
/bea/script/iom/dream/test.sh
[webusr@iomweb1 dream]$ 

find /etc -type d 在/etc下找文件类型为d的目录文件

[webusr@iomweb1 dream]$ find /bea/script/iom -type d
/bea/script/iom
/bea/script/iom/wfsapp
/bea/script/iom/wfsapp/process65
/bea/script/iom/wfsapp/process55
/bea/script/iom/dream
/bea/script/iom/monitor
[webusr@iomweb1 dream]$ 

find /etc -type l 在/etc下找文件类型为l的链接文件

[webusr@iomweb1 dream]$ find /bea/script -type l
[webusr@iomweb1 dream]$ 

find . -size+1000000c 在当前目录下查找文件大小大于1M的文件,1M是1000000个字节

[webusr@iomweb1 script]$ ll -h /bea/script
总用量 8.0K
drwxrwxr-x. 5 weblogic weblogic 4.0K 3月  11 12:40 iom
drwxr-x---. 2 webusr   webgrp   4.0K 8月   1 2016 singletask
[webusr@iomweb1 script]$ find . -size +10000c
./iom/wfsapp/process65/wfs.out
./iom/wfsapp/process55/wfs.out

find . -perm 700 |xargs chmod 777 找出当前目录下的所有权限为700的文件,并把它权限重设为777 

[webusr@iomweb1 dream]$ ll
总用量 16-rw-r-----. 1 webusr webgrp    0 3ÔÂ  25 18:17 file1.xls
-rw-r-----. 1 webusr webgrp    0 3ÔÂ  25 18:17 file2.doc
-rw-r-----. 1 webusr webgrp    0 3ÔÂ  25 18:17 file3.ppt
-rwxr-x---. 1 webusr webgrp  103 3ÔÂ  25 18:10 test.sh
[webusr@iomweb1 dream]$ find /bea/script/iom/dream -name \'file*\'|xargs chmod 777
[webusr@iomweb1 dream]$ ll
总用量 16-rwxrwxrwx. 1 webusr webgrp    0 3ÔÂ  25 18:17 file1.xls
-rwxrwxrwx. 1 webusr webgrp    0 3ÔÂ  25 18:17 file2.doc
-rwxrwxrwx. 1 webusr webgrp    0 3ÔÂ  25 18:17 file3.ppt
-rwxr-x---. 1 webusr webgrp  103 3ÔÂ  25 18:10 test.sh
[webusr@iomweb1 dream]$ 

fine . type f |xargs ls -l 找出文件并查看其详细信息

[webusr@iomweb1 dream]$ find /bea/script/iom/dream -name \'file*\'|xargs ls -l
-rw-r-----. 1 webusr webgrp 0 3ÔÂ  25 18:17 /bea/script/iom/dream/file1.xls
-rw-r-----. 1 webusr webgrp 0 3ÔÂ  25 18:17 /bea/script/iom/dream/file2.doc
-rw-r-----. 1 webusr webgrp 0 3ÔÂ  25 18:17 /bea/script/iom/dream/file3.ppt
[webusr@iomweb1 dream]$ 

xargs命令使用

##查找类型为目录的信息
[webusr@iomweb1 dream]$ find /bea/script/iom/dream -type d
/bea/script/iom/dream
/bea/script/iom/dream/a
/bea/script/iom/dream/c
/bea/script/iom/dream/b

##查找名字为file开头的文件
[webusr@iomweb1 dream]$ find /bea/script/iom/dream -name \'file*\'
/bea/script/iom/dream/file4.doc
/bea/script/iom/dream/file6.ppt
/bea/script/iom/dream/file2.txt
/bea/script/iom/dream/file5.xls
/bea/script/iom/dream/file3.txt
/bea/script/iom/dream/file1.txt

##xargs将前面的结果赋值给后面的命令
[webusr@iomweb1 dream]$ find /bea/script/iom/dream -name \'file*\'|xargs rm -rf
[webusr@iomweb1 dream]$ find /bea/script/iom/dream -name \'file*\'
[webusr@iomweb1 dream]$ ll
总用量 16
drwxr-x---. 2 webusr webgrp 4096 3?? 25 18:11 a
drwxr-x---. 2 webusr webgrp 4096 3?? 25 18:11 b
drwxr-x---. 2 webusr webgrp 4096 3?? 25 18:11 c
-rwxr-x---. 1 webusr webgrp 103 3?? 25 18:10 test.sh
[webusr@iomweb1 dream]$

17、Linux正则表达式详解

^linux 以linux开头的行

[webusr@iomweb1 dream]$ grep -E \'linux\' file
linux is very much!
Php is very linux much!
phP is much linux
[webusr@iomweb1 dream]$ grep -E \'^linux\' file
linux is very much!
[webusr@iomweb1 dream]$ grep -En \'^linux\' file
1:linux is very much!
[webusr@iomweb1 dream]$

$php 以php结尾的行

[webusr@iomweb1 dream]$ grep -Eni \'linux$\' file
5:phP is much linux
[webusr@iomweb1 dream]$ 

. 匹配任意单字符

[webusr@iomweb1 dream]$ grep -E \'linux\' file
linux is very much!
Php is very linux much!
phP is much linux
[webusr@iomweb1 dream]$ grep -E \'linux.\' file
linux is very much!
Php is very linux much!
[webusr@iomweb1 dream]$ grep -Ei \'.linux\' file
Php is very linux much!
phP is much linux
[webusr@iomweb1 dream]$ 

.+匹配任意多个字符

[webusr@iomweb1 dream]$ grep -E \'.+linux.+\' file
Php is very linux much!

[webusr@iomweb1 dream]$ grep -En \'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\' file
9:ip:192.168.0.1
[webusr@iomweb1 dream]$

.*匹配0个或者多个字符

[webusr@iomweb1 dream]$ grep -E \'.*linux.*\' file
linux is very much!
Php is very linux much!
phP is much linux
[webusr@iomweb1 dream]$

[0-9a-z]  匹配[]内任意一个字符

[webusr@iomweb1 dream]$ grep -En \'[0-9]\' file
7:my age is:30 
9:ip:192.168.0.1
[webusr@iomweb1 dream]$ grep -En \'[0-9]+\' file
7:my age is:30 
9:ip:192.168.0.1
[webusr@iomweb1 dream]$ 

(linux)+ 出现多次linux单词

[webusr@iomweb1 dream]$ grep -En \'(linux)+\' file
1:linux is very much!
5:Php is very linux much!
6:phP is much linux
[webusr@iomweb1 dream]$ 

(web){2} web出现了2次以上

[webusr@iomweb1 dream]$ grep -En \'(very)+\' file
1:linux is very much!
2:java is very much!
3:php is very much?
9:mysql is veryveryvery much! much
10:Linux is much veryveryveryvery much!

[webusr@iomweb1 dream]$ grep -En \'(very){3}\' file
9:mysql is veryveryvery much! much
10:Linux is much veryveryveryvery much!

[webusr@iomweb1 dream]$ grep -En \'(very){2,3}\' file
9:mysql is veryveryvery much! much
10:Linux is much veryveryveryvery much!
[webusr@iomweb1 dream]$ 

\  只用来屏蔽一个元字符的特殊含义

[webusr@iomweb1 dream]$ grep -En \'[0-9]+.\' file
7:my age is:30 
9:ip:192.168.0.1
[webusr@iomweb1 dream]$ grep -En \'[0-9]+\.\' file 9:ip:192.168.0.1
[webusr@iomweb1 dream]$ grep -En \'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\' file 9:ip:192.168.0.1 [webusr@iomweb1 dream]$

18、grep搜索命令详解

grep "li qq" * 在所有的文件中查找li qq文件

[webusr@iomweb1 dream]$ grep "linux" *
file:linux is very much!
file:Php is very linux much!
file:phP is much linux
[webusr@iomweb1 dream]$ 

grep -c "file"  a 在a文件中有多少行匹配到file

[webusr@iomweb1 dream]$ grep -c "linux" file
3
[webusr@iomweb1 dream]$ 

grep -n "file" a 在a文件中有多少行匹配到file,同时显示行和行号

[webusr@iomweb1 dream]$ grep -n "linux" file
1:linux is very much!
4:Php is very linux much!
5:phP is much linux
[webusr@iomweb1 dream]$ 

grep -i "file" a 在a文件中查找file,并不区分大小写

#匹配行号
[webusr@iomweb1 dream]$ grep -n \'linux\' file 1:linux is very much! 4:Php is very linux much! 5:phP is much linux #忽略大小写
[webusr@iomweb1 dream]$
grep -i \'linux\' file linux is very much! Php is very linux much! phP is much linux Linux is very much!
#忽略大小写且显示行号 [webusr@iomweb1 dream]$ grep -in \'linux\' file 1:linux is very much! 4:Php is very linux much! 5:phP is much linux 7:Linux is very much! [webusr@iomweb1 dream]$

grep -v "file" a 在a文件中过滤掉file所在的行【取反】

[webusr@iomweb1 dream]$ grep \'linux\' file
linux is very much!
Php is very linux much!
phP is much linux
[webusr@iomweb1 dream]$ grep -v \'linux\' file
java is very much!
php is very much!
mysql is very much!
Linux is very much!
[webusr@iomweb1 dream]$ grep -vin \'linux\' file
2:java is very much!
3:php is very much!
6:mysql is very much!
[webusr@iomweb1 dream]$ 

grep -E "2004:22:5[5-9]" a 在a文件中查找时间在2004:22:50->2004:22:59的所在行

这里的"-E"表示增强型grep,这时候就可以使用正则表达式

[webusr@iomweb1 dream]$ cat file
2004:22:32 login info
2004:22:50 user1 index.php
2004:22:52 user2 index.java
2004:22:55 user3 a.jsp
2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ grep -E "2004:22:5[5-9]" file
2004:22:55 user3 a.jsp
2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ 

grep -E "^[^210]" a 在a文件中查找不包含210的行

[webusr@iomweb1 dream]$ grep -Ein "linux" file
1:linux is very much!
5:Php is linux ery linux much!
6:phP is much linux
10:Linux is much veryveryveryvery much!

[webusr@iomweb1 dream]$ grep -Ein "^[^linux]" file
2:java is very much!
3:php is very much?
5:Php is linux ery linux much!
6:phP is much linux
7:my age is:30 
9:mysql is veryveryvery much! much
[webusr@iomweb1 dream]$ 

grep -E "h*p" a 查找a文件中包含h和p的行

[webusr@iomweb1 dream]$ grep -E "P*p" file
php is very much?
Php is linux ery linux much!
phP is much linux
ip:192.168.0.1
[webusr@iomweb1 dream]$ 

grep -E "[5-8][6-9][0-3]" a 查找大于560小于893的行

[webusr@iomweb1 dream]$ grep -En "[5-8][6-9][0-3]" file
7:563
8:891
[webusr@iomweb1 dream]$ 

grep -E "4{2}" a 查找包含两个4的行

[webusr@iomweb1 dream]$ grep -En \'(very){2}\' file
4:veryveryvery
5:veryvery
[webusr@iomweb1 dream]$ grep -En \'9{2}\' file
9:9999
[webusr@iomweb1 dream]$ grep -En \'(9){2}\' file
9:9999
[webusr@iomweb1 dream]$ 

grep -E "4{2,}" a 查找大于两个4的行

[webusr@iomweb1 dream]$ grep -En \'(very){2,}\' file
1:linux is veryveryyyyyy!
4:veryveryvery
5:veryvery
[webusr@iomweb1 dream]$ grep -En \'9{2,}\' file
6:99123
7:999
8:9999
[webusr@iomweb1 dream]$ grep -En \'(9){2,}\' file
6:99123
7:999
8:9999
[webusr@iomweb1 dream]$ 

grep -E "4{2,4}" a 查找大于两个4小于4个4的行

[webusr@iomweb1 dream]$ grep -En \'(very){2,3}\' file
1:linux is veryveryyyyyy!
4:veryveryvery
5:veryvery
[webusr@iomweb1 dream]$ grep -En \'(9){2,4}\' file
6:99123
7:999
8:9999
[webusr@iomweb1 dream]$ grep -En \'9{2,4}\' file
6:99123
7:999
8:9999
[webusr@iomweb1 dream]$ 

grep -E "^$" a 查找a文件中的空行

[webusr@iomweb1 dream]$ grep -En "^$" file
4:
7:
[webusr@iomweb1 dream]$ 

grep "?" a 查找a文件中包含?的行

[webusr@iomweb1 dream]$ grep "?" file
php is very much?
[webusr@iomweb1 dream]$ 

grep -E "^d" a 查找a文件中以d开头的行

[webusr@iomweb1 dream]$ grep -E "^linux" file
linux is very much!
[webusr@iomweb1 dream]$ 

grep -E "^[^d]" a 查找a文件中不是以d开头的行

[webusr@iomweb1 dream]$ grep -E "^linux" file
linux is very much!
[webusr@iomweb1 dream]$ grep -Ein "^[^linux]" file
2:java is very much!
3:php is very much?
5:Php is very linux much!
6:phP is much linux
8:mysql is very much!
[webusr@iomweb1 dream]$ 

grep -E增强grep,可以使用正则表达式,(/sbin/nologin) 用括号括起来,表示一个单元

[webusr@iomweb1 dream]$ cat /etc/passwd |grep -E \'(/sbin/nologin)$\'
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
pegasus:x:66:65:tog-pegasus OpenPegasus WBEM/CIM services:/var/lib/Pegasus:/sbin/nologin

19、Awk编辑工具使用

awk从文件中匹配信息

awk \'{print $0}\' access.log 查找出file文件中的每一列

[webusr@iomweb1 dream]$ awk \'{print $0}\' access.log |head -3
10.13.37.149 - - [15/六月/2016:10:21:24 +0800] "GET /favicon.ico HTTP/1.1" 404 1164 
10.13.37.149 - - [15/六月/2016:11:32:08 +0800] "GET /favicon.ico HTTP/1.1" 404 1164 
10.13.38.28 - - [15/六月/2016:13:41:55 +0800] "GET /favicon.ico HTTP/1.1" 404 1164 

awk \'{print $1"\t"$7}\' access.log 查找出file文件中第1列和第7列

[webusr@iomweb1 dream]$ awk \'{print $1"\t"$7}\' access.log |head -3
10.13.37.149    /favicon.ico
10.13.37.149    /favicon.ico
10.13.38.28     /favicon.ico
[webusr@iomweb1 dream]$ 

cat file|awk \'$0 !~/192.168.10.2/\'|grep "php"|wc -l 匹配192.168.10.2的ip地址的统计,!~为不匹配 

##!~表示不匹配
[webusr@iomweb1 dream]$ cat file|awk \'$0 !~/192.168.10.2/\'|grep "php"
2004:22:50 user1 index.php
[webusr@iomweb1 dream]$ cat file|awk \'$0 !~/192.168.10.2/\'|grep "php"|wc -l
1
##~表示匹配
[webusr@iomweb1 dream]$ cat file|awk \'$0 ~/192.168.10.2/\'|grep "php"
[webusr@iomweb1 dream]$ cat file|awk \'$0 ~/192.168.10.2/\'|grep "php"|wc -l
0
[webusr@iomweb1 dream]$ 

cut和awk用法对比

##cut用-d表示以分隔符分割,分隔符为冒号":",-f 1表示显示第一列
[webusr@iomweb1 dream]$ cat /etc/passwd | cut -d: -f 1
root
bin
daemon
##awk用F表示分割,这里分隔符为":",显示第一列
[webusr@iomweb1 dream]$ cat /etc/passwd|awk -F: \'{print $1}\'
root
bin
daemon
[webusr@iomweb1 dream]$ cat /etc/passwd | cut -d: -f 1,4
root:0
bin:1
daemon:2
[webusr@iomweb1 dream]$ cat /etc/passwd|awk -F: \'{print $1,$4}\'
root 0
bin 1
daemon 2

awk的高级用法,配合head、tail使用

##head前5行
[webusr@iomweb1 dream]$ cat /etc/passwd |head -5|awk -F: \'{print "username:"$1" =>uid:"$3}\' username:root =>uid:0 username:bin =>uid:1 username:daemon =>uid:2 username:adm =>uid:3 username:lp =>uid:4 #tail后5行
[webusr@iomweb1 dream]$
cat /etc/passwd |tail -5|awk -F: \'{print "username:"$1" =>uid:"$3}\' username:weblogic =>uid:502 username:oscheck =>uid:202 username:bj-4a =>uid:40233 username:sisips =>uid:40234 username:iomdicp =>uid:40235 [webusr@iomweb1 dream]$

awk使用到循环中

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#test.sh

for i in `cat /etc/passwd|head|awk -F: \'{print $1}\'`
do
        echo $i
done
[webusr@iomweb1 dream]$ sh test.sh 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator

awk配合匹配行和列

##NR在awk中表示行数,print后面不接信息,表示全部打印
[webusr@iomweb1 dream]$ df|awk \'{if (NR==3){print}}\'
devtmpfs                       32870860        0  32870860    0% /dev
##打印第一列
[webusr@iomweb1 dream]$ df|awk \'{if (NR==3){print $1}}\'
devtmpfs
##$0表示打印全部信息
[webusr@iomweb1 dream]$ df|awk \'{if (NR==3){print $0}}\'
devtmpfs                       32870860        0  32870860    0% /dev
##输出第一行,第五列
[webusr@iomweb1 dream]$ df|awk \'{if (NR==2){print $5}}\'
54%
##输出第一行,第五列,将百分百转为数值
[webusr@iomweb1 dream]$ df|awk \'{if (NR==2){print int($5)}}\'
54
[webusr@iomweb1 dream]$ 

 awk中行NR,和列NF

##awk中:NF表示列,NR表示行
[webusr@iomweb1 dream]$ df|awk \'END{print NF,NR}\'
6 16
[webusr@iomweb1 dream]$ df|awk \'END{print "col:"NF,",row:"NR}\'
col:6 ,row:16
[webusr@iomweb1 dream]$ df|awk \'END{print "col:"NF",row:"NR}\'
col:6,row:16
[webusr@iomweb1 dream]$ 

20、Sed工具、Sort排序、Uniq统计及Split文件分隔

1)Sed行定位的使用

awk应用于列定位、grep应用于行匹配,sed是最佳的行定位

使用nl显示行号

[webusr@iomweb1 dream]$ nl file
     1  2004:22:32 login info
     2  2004:22:50 user1 index.php
     3  2004:22:52 user2 index.java
     4  2004:22:55 user3 a.jsp
     5  2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ 

sed -n \'2\'p file 只打印第二行,不打印其他行

[webusr@iomweb1 dream]$ nl file
     1  2004:22:32 login info
     2  2004:22:50 user1 index.php
     3  2004:22:52 user2 index.java
     4  2004:22:55 user3 a.jsp
     5  2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ sed -n \'2\'p file
2004:22:50 user1 index.php
[webusr@iomweb1 dream]$ cat file|sed -n \'2\'p
2004:22:50 user1 index.php
[webusr@iomweb1 dream]$ 

sed -n \'1,4\'p file 打印从第1行到第4行的记录

[webusr@iomweb1 dream]$ nl file
     1  2004:22:32 login info
     2  2004:22:50 user1 index.php
     3  2004:22:52 user2 index.java
     4  2004:22:55 user3 a.jsp
     5  2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ sed -n \'1,3\'p file
2004:22:32 login info
2004:22:50 user1 index.php
2004:22:52 user2 index.java
[webusr@iomweb1 dream]$ cat file|sed -n \'1,3\'p
2004:22:32 login info
2004:22:50 user1 index.php
2004:22:52 user2 index.java
[webusr@iomweb1 dream]$ 

sed -n \'/los/\'p file 打印匹配的los的行

[webusr@iomweb1 dream]$ nl file
     1  2004:22:32 login info
     2  2004:22:50 user1 index.php
     3  2004:22:52 user2 index.java
     4  2004:22:55 user3 a.jsp
     5  2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ sed -n \'/user1/\'p file
2004:22:50 user1 index.php
[webusr@iomweb1 dream]$ 

sed -n \'4,/los/\'p file 打印从第4行匹配到los的之间的所有行(如果/los/不存在,则直接匹配到最后)

[webusr@iomweb1 dream]$ nl file
     1  2004:22:32 login info
     2  2004:22:50 user1 index.php
     3  2004:22:52 user2 index.java
     4  2004:22:55 user3 a.jsp
     5  2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ sed -n \'3,/user3/\'p file
2004:22:52 user2 index.java
2004:22:55 user3 a.jsp
[webusr@iomweb1 dream]$ cat file|sed -n \'3,/user3/\'p 
2004:22:52 user2 index.java
2004:22:55 user3 a.jsp
[webusr@iomweb1 dream]$ 

sed \'1,2\'d file 把第1行和第2行全部删除(只是删除显示,并没有实际删除)

[webusr@iomweb1 dream]$ nl file
     1  2004:22:32 login info
     2  2004:22:50 user1 index.php
     3  2004:22:52 user2 index.java
     4  2004:22:55 user3 a.jsp
     5  2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ sed \'1,2\'d file
2004:22:52 user2 index.java
2004:22:55 user3 a.jsp
2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$ cat file|sed \'1,2\'d file
2004:22:52 user2 index.java
2004:22:55 user3 a.jsp
2004:22:59 user4 b.cpp
[webusr@iomweb1 dream]$  

从rbash开始匹配到最后

[webusr@iomweb1 dream]$ cat /etc/passwd |sed -n \'/rbash/,$\'p
bj-4a:x:40233:4023::/home/bj-4a:/bin/rbash
sisips:x:40234:4024:SDCSS_User:/opt/Symantec/sdcssagent/IPS:/bin/sh
iomdicp:x:40235:40235::/home/iomdicp:/bin/bash
[webusr@iomweb1 dream]$ 

 与其他命令配合使用

[webusr@iomweb1 iom]$ df -m
文件系统                       1M-块  已用   可用 已用% 挂载点
/dev/mapper/rootvg-root         9952  4996   4429   54% /
devtmpfs                       32101     0  32101    0% /dev
tmpfs                          32111     1  32110    1% /dev/shm
tmpfs                          32111  2379  29733    8% /run
[webusr@iomweb1 iom]$ df -m|nl|sed -n \'2\'p
     2  /dev/mapper/rootvg-root         9952  4996   4429   54% /
[webusr@iomweb1 iom]$ df -m|nl|sed -n \'2\'p|awk \'{print $6}\'
54%
[webusr@iomweb1 iom]$ df -m|nl|sed -n \'2\'p|awk \'{print int($6)}\'
54
[webusr@iomweb1 iom]$

2)uniq行定位的使用

uniq -c file打印紧挨的重复行出现的次数 

[webusr@iomweb1 dream]$ cat file  
aaaa
aaaa
bbbb
cccc
vvvv
zzzz
zzzz
[webusr@iomweb1 dream]$ uniq file  ##去重查看
aaaa
bbbb
cccc
vvvv
zzzz
[webusr@iomweb1 dream]$ uniq -c file  ##统计紧挨着的重复次数
      2 aaaa
      1 bbbb
      1 cccc
      1 vvvv
      2 zzzz
[webusr@iomweb1 dream]$

uniq -d file只打印重复的行

[webusr@iomweb1 dream]$ cat file 
aaaa
aaaa
bbbb
cccc
vvvv
zzzz
zzzz
[webusr@iomweb1 dream]$ uniq -d file 
aaaa
zzzz
[webusr@iomweb1 dream]$

awk \'{print $1}\' /var/log/httpd/access_log|sort|uniq -c把apache网站的所有访问ip全部统计出来,并打印出统计次数

统计文件中重复行数(包括间隔重复,即非紧邻着的重复)

[webusr@iomweb1 dream]$ cat file |sort|uniq -c  #升序排序后,统计重复次数
      2 aaaa
      1 bbbb
      1 cccc
      1 vvvv
      2 zzzz
[webusr@iomweb1 dream]$ cat file |sort -r|uniq -c #降序排序后,统计重复次数
      2 zzzz
      1 vvvv
      1 cccc
      1 bbbb
      2 aaaa
[webusr@iomweb1 dream]$ 

 

[webusr@iomweb1 dream]$ nl file 
     1  aaaa
     2  aaaa
     3  bbbb
     4  cccc
     5  vvvv
     6  zzzz
     7  zzzz
[webusr@iomweb1 dream]$ wc -l file 
7 file
[webusr@iomweb1 dream]$ uniq -c file 
      2 aaaa
      1 bbbb
      1 cccc
      1 vvvv
      2 zzzz
[webusr@iomweb1 dream]$ 

3)Sort排序

sort file把文件按字母的升序进行排序

[webusr@iomweb1 dream]$ sort file
aaaa
aaaa
bbbb
cccc
vvvv
zzzz
zzzz
[webusr@iomweb1 dream]$ 

sort -r file 把文件按字母的降序进行排序

[webusr@iomweb1 dream]$ sort -r file
zzzz
zzzz
vvvv
cccc
bbbb
aaaa
aaaa
[webusr@iomweb1 dream]$ 

cat file|sort -t:k 1-r 为“:”分割后的第一列来进行倒叙排序 

[webusr@iomweb1 dream]$ cat file |sort -k1
a b c d 5
b a d c 4
c a h b 3
d e f a 2
f o j s 1
[webusr@iomweb1 dream]$ cat file |sort -k1 -r
f o j s 1
d e f a 2
c a h b 3
b a d c 4
a b c d 5
[webusr@iomweb1 dream]$ cat file |sort -k5
f o j s 1
d e f a 2
c a h b 3
b a d c 4
a b c d 5
[webusr@iomweb1 dream]$ cat file |sort -k5 -r
a b c d 5
b a d c 4
c a h b 3
d e f a 2
f o j s 1
[webusr@iomweb1 dream]$ 

4)split行分割的使用

split -2 file spt 生成fileab,fileac,…,filkai等多个文件,把a文件每2行分割成一个文件,每个文件的前缀都是以file开头的 

[webusr@iomweb1 dream]$ cat file 
a b c d 5
b a d c 4
d e f a 2
c a h b 3
f o j s 1
[webusr@iomweb1 dream]$ ll
-rw-r-----. 1 webusr webgrp 375113 3ÔÂ  15 07:56 access.log
-rw-r-----. 1 webusr webgrp     50 3ÔÂ  28 18:38 file
-rw-r-----. 1 webusr webgrp     20 3ÔÂ  28 18:43 sptaa
-rw-r-----. 1 webusr webgrp     20 3ÔÂ  28 18:43 sptab
-rw-r-----. 1 webusr webgrp     10 3ÔÂ  28 18:43 sptac
-rwxr-x---. 1 webusr webgrp     92 3ÔÂ  27 18:03 test.sh
[webusr@iomweb1 dream]$ cat sptaa
a b c d 5
b a d c 4
[webusr@iomweb1 dream]$ cat sptab
d e f a 2
c a h b 3
[webusr@iomweb1 dream]$ cat sptac
f o j s 1
[webusr@iomweb1 dream]$ 

七、Linux启动流程和服务脚本

21、简述Linux服务器启动流程

Linux启动流程:
1、bios找到磁盘上的mbr主引导扇区
2、进入grub界面选择相应的启动内核
3、读取kernel内核文件-/boot/initrd-*
4、读取init的景象文件-/boot/initrd-*
5、init去读取/etc/inittab
6、读取启动级别(id:3:initdefault)
7、读取/etc/rc.d/rc.sysinit,完成时钟设置,主机名的设置,分区表的挂载(/etc/fstab)
8、读取/etc/rc.d/rc脚本,通过该焦恩吸收3级别,然后启动/etc/rc.d/rc3.d下所有以S开头的服务,不启动该目录下以K开头的服务
9、读取/etc/rc.d/rc.local脚本
10、进入登录界面

运行级别:
0 关机
1 单用户
2 不支持nfs(网络文件系统)
3 字符界面
4 未被使用
5 图形界面
6 重启
更改系统运行级别:init 0|3|5|6
查看运行级别:runlevel

Rpm包软件:
1、服务脚本:/etc/rc.d/init.d/httpd
2、开启或关闭:service httpd start|stop
3、开机启动:chkconfig --level 3 httpd on

源代码软件:
1、服务脚本
/usr/local/apache2/bin/apachetl
2、开启
/usr/local/apaches/bin/apachetl start|stop
3、开机启动
vi /etc/rc.d/rc.local
/usr/local/apache2/bin/apachectl start

自定义脚本头部:
#!/bin/bash
#myshd

#chkconfig:2345 90 20
#descripption:myshd server daemon

服务脚本调试:
1、使用service启动myshd脚本:service myshd start
2、设置开机启动:chkconfig myshd on

改造apache服务脚本:
1、复制源代码服务脚本
cp /usr/local/apache2/bin/apachetl/etc/init.d/
2、修改脚本
#chkconfig:2345 90 20
#description:apachectl server daemon
3、启动测试:service apachectl start
4、开机启动:chkconfig apachectl on

22、详述Linux服务器启动流程

Linux系统启动流程:
一、初始化阶段
1、grub引导界面
2、识别硬件
3、初始化驱动

二、加载/etc/rc.d/rc.sysinit系统初始化脚本
4、进入欢迎界面
5、设置时钟
6、设置主机名
7、挂载文件系统
8、挂载光驱
9、进入3级别
10、启动虚拟内存
11、设置磁盘阵列

三、加载/etc/rc.d/rc进程管理脚本
12、设置防火墙
13、检测硬件变化
14、启动网络服务
15、启动3级别下允许启动的进程(比如sshd)
14、进入登录界面
15、进入系统

23、如何自定义服务脚本及如何制作标准rpm服务脚本

把服务脚本改写成标准rpm脚本:
#chkconfig:2345 90 20
#description:Mytest server daemon

通过service把自定义脚本进行开启和关闭
service mytest start|stop|restart

通过chkconfig把自定义脚本设置开机启动:
chkconfig mytest on
chkconfig mytest off

 

实例操作如下*********************

自定义服务脚本:

[webusr@iomweb1 dream]$ cat mytest 
#!/bin/bash
#mytest
case $1 in
        start)
                echo \'mytest starting!!!\'
                sleep 1
                ;;
        stop)
                echo \'mytest stoping!!!\'
                sleep 1
                ;;
        restart)
                echo \'mytest restartint!!!\'
                sleep 1
                ;;
        *)
                echo \'start|stop|restart\'
                ;;
esac

[webusr@iomweb1 dream]$ sh mytest start
mytest starting!!!
[webusr@iomweb1 dream]$ sh mytest stop
mytest stoping!!!
[webusr@iomweb1 dream]$ sh mytest restart
mytest restartint!!!
[webusr@iomweb1 dream]$ sh mytest 123
start|stop|restart
[webusr@iomweb1 dream]$ 

给脚本设置开机启动:

[webusr@iomweb1 dream]$ vi /etc/rc.d/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run \'chmod +x /etc/rc.d/rc.local\' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local

#下面是自定义的开机脚本
/mnt/mytest start
[webusr@iomweb1 dream]$

脚本要设置chkconfig参数

[webusr@iomweb1 dream]$ vi
#!/bin/bash
#mytest

#以下两行比不可少,通过chkconfig启动2345级别,开机优先级90(后),关机优先级20(先)
#chkconfig:2345 90 20
#description:Mytest server daemon

case $1 in
    start)
        echo \'mytest starting!!!\'
        sleep 1
        ;;
    stop)
        echo \'mytest stoping!!!\'
        sleep 1
        ;;
    restart)
        echo \'mytest restartint!!!\'
        sleep 1
        ;;
    *)
        echo \'start|stop|restart\'
        ;;
esac
[webusr@iomweb1 dream]$

3级别下启动脚本,S表示启动,K表示杀掉,S99表示优先级99(高),S99后面跟脚本名

[webusr@iomweb1 rc.d]$ ls
init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local
[webusr@iomweb1 rc.d]$ cd rc3.d
[webusr@iomweb1 rc3.d]$ pwd
/etc/rc.d/rc3.d
[webusr@iomweb1 rc3.d]$ ls
K19gcstartup        S50isisd             S66llt     S95vras-vradmind
K19unlockgcstartup  S50vras-vradmind.sh  S67gab     S95vxrsyncd
K50netconsole       S50vxnm-vxnetd       S68vxfen   S97rhnsd
K80vxdbdctrl        S50vxrsyncd.sh       S71amf     S98gcstartup
S00vxfs             S50vxvm-reconfig     S75xprtld  S98lockgcstartup
S10network          S50vxvm-recover      S76vxodm   S99vcs
S14vxvm-boot        S65veki              S80vxdcli  S99vxfs_replication
[webusr@iomweb1 rc3.d]$ 

设置链接

[webusr@iomweb1 rc3.d]chkconfig mytest on  ##执行没有反应,因为没有建立链接
[webusr@iomweb1 rc3.d]chkconfig --list mytest ##建立链接
mytest    0:off    2:on    3:on    4:on    5:on    6:off
[webusr@iomweb1 rc3.d]

八、Shell编写字符菜单管理

24、字符管理制作

菜单管理实例:
1、用户添加
2、用户删除
3、修改密码
4、查看硬盘空间
5、查看内存空间
6、退出菜单

 脚本内容:

[webusr@iomweb1 dream]$ cat menu.sh 
#!/bin/bash
#mebu.sh

function menu(){
title="My Menu"
url="www.baidu.com"
time=`date +%y-%m-%d`
cat << eof
#######################################################
                        `echo -e "\033[32;40m$title\033[0m"`
########################################################
*       1)add a user
*       2)set a password for user
*       3)show file
*       4)print disk space
*       5)print mem space
*       6)quit
########################################################
$url                                    $time
########################################################

eof
}
menu

[webusr@iomweb1 dream]$ cat index.sh 
#!/bin/bash
#index.sh

# . menu.sh
clear
sh menu.sh

while true
do
        read -p "please input a option:" option
        case $option in
                1 )
                        ;;
                2 )
                        ;;
                3)
                        ls -l
                        ;;
                4)
                        df -m
                        ;;
                5)
                        df -h
                        ;;
                6)
                        break
                        ;;
        esac
done[webusr@iomweb1 dream]$ 

执行情况:

[webusr@iomweb1 dream]$ sh index.sh 

#######################################################
                        My Menu
########################################################
*       1)add a user
*       2)set a password for user
*       3)show file
*       4)print disk space
*       5)print mem space
*       6)quit
########################################################
www.baidu.com                                    19-03-29
########################################################

please input a option:3
总用量 392
-rwxr-x---. 1 webusr webgrp 375113 3月 15 07:56 access.log
-rwxr-x---. 1 webusr webgrp 729 3月 29 14:31 dream.sh
-rwxr-x---. 1 webusr webgrp 50 3月 28 18:38 file
-rwxr-x---. 1 webusr webgrp 239 3月 29 16:08 index.sh
-rwxr-x---. 1 webusr webgrp 597 3月 29 16:06 menu.sh
-rwxr-x---. 1 webusr webgrp 229 3月 28 20:00 mytest
-rwxr-x---. 1 webusr webgrp 228 3月 28 19:59 test.sh


please input a option:6
[webusr@iomweb1 dream]$ 

25、字符菜单管理知识点详解

 1)shell函数定义

function menu(){
    echo "this is a func"
}

2)shell函数使用

menu

3)cat命令的heredoc使用:相当于echo,且能按照原格式输出,可以包含执行语句和变量信息。

[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#func.sh

name=user1
cat << eof
        aaaaaaaaaa${name}
        aaaaaaaaaa${name}
        aaaaaaaaaa${name}
        aaaaae`echo -e "\033[30;47m[$name]\033[0m"`aaaaa
eof
[webusr@iomweb1 dream]$ sh test.sh 
        aaaaaaaaaauser1
        aaaaaaaaaauser1
        aaaaaaaaaauser1
        aaaaae[user1]aaaaa
[webusr@iomweb1 dream]$ 

4)字符界面下字体的颜色控制

echo -e "\033[30;47m test \033[0m"

5)shell如何包含文件

[webusr@iomweb1 dream]$ cat menu.sh 
#!/bin/bash
#mebu.sh

function menu(){
name=user1
cat << eof
        aaaaaaaaaa${name}
        aaaaaaaaaa${name}
        aaaaaaaaaa${name}
        aaaaae`echo -e "\033[30;47m[$name]\033[0m"`aaaaa
eof
}[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#func.sh

. menu.sh
menu[webusr@iomweb1 dream]$ 

函数调用不好使,经过验证,用如下命令source:

[webusr@iomweb1 dream]$ cat menu.sh 
#!/bin/bash
#mebu.sh

function menu(){
name=user1
cat << eof
        aaaaaaaaaa${name}
        aaaaaaaaaa${name}
        aaaaaaaaaa${name}
        aaaaae`echo -e "\033[30;47m[$name]\033[0m"`aaaaa
eof
}
[webusr@iomweb1 dream]$ cat test.sh 
#!/bin/bash
#func.sh

source ./menu.sh
menu
[webusr@iomweb1 dream]$ sh test.sh 
        aaaaaaaaaauser1
        aaaaaaaaaauser1
        aaaaaaaaaauser1
        aaaaae[user1]aaaaa
[webusr@iomweb1 dream]$ 

6)while如何写一个死循环

while true
do
    #执行代码
done

九、Shell编写邮件报警脚本

26、编写服务器监控脚本

1)、POSTFIX邮件服务器准备

postfix软件-发邮件-25
dovecot软件-发邮件-110

vi /etc/dovecot/dovecot.conf
1.修改protocols支持pop3和pop3s
#Protocols we want to be serving:
# Protocols we want to be serving.
# imap imaps pop3 pop3s
#protocols = imap pop3 lmtp
protocols = imap imaps pop3 pop3s

# Protocols we want to be serving.
#protocols = imap pop3 lmtp

2.修改pop3和imaps在所在ipv4接口上监听110与143端口
imap_listen = *
pop3_listen = *

发送邮件命令
echo "user1->user2" |mail user2@dream.com

收邮件:
mail

 

2)、编写web服务器监控脚本

 

3)、编写mysql数据库监控脚本

 

4)、编写disk空间使用监控脚本

 

5)、编写mem空间使用监控脚本

 

27、邮件服务器测试

1

十、Shell信号捕捉和日志处理

28、脚本日志文件生成技术

1

29、脚本临时文件生成和使用

1

30、脚本信号捕捉技术

1

十一、Shell如何操作Mysql数据库

31、MySQL常用操作

1

32、Shell操作MySQL之增删改查

1

33、apache日志分隔及相关计划任务

1

34、apache日志统计之MySQL数据库

1

十二、Shell结合cgi实现web功能

35、ogi脚本和预定义变量

1

36、ogi脚本实例

1

37、ogi获取地址栏参数

1

38、ogi获取表单get数据

1

39、ogi获取表单post数据和指令执行

1

十三、Shell结合php实现web功能

40、PHP操作Shell函数

1

41、PHP提取操作Shell

1

42、PHP首页和用户查看功能

1

43、PHP系统模块开发

1

十四、Rsync智能网站备份

44、网站是能备份Shell脚本编写

1

45、Rspnc无口令远程传输

1

46、Linux多服务器环境准备

1

 

作业

1、按照条件查找日志,存储到新的临时目录中,并进行目录和文件的级联压缩

查找
find /cattsoft/naseu/EU-UTF/debug/log/proc -name \'MQInst*3-25*\'| xargs -i cp {} /cattsoft/naseu/EU-UTF/debug/log/tmpproc
压缩
gzip -r tmpproc
gzip tmpproc tmpproc.gz

 

2、通过配置文件实现对进程的监控

 

3、监控磁盘空间使用效率

 

4、访问mysql数据库处理结果集,统计接收总量,报竣总量,失败量及失败原因明细

 

 

分类:

技术点:

相关文章: