1.什么是shell
shell是一个命令解释器.是介于操作系统kernel(内核)与用户之间的一个绝缘层.准确地说,它也是一种强力的计算机语言。shell的工作形式有两种,一种是交互式,用户输入一条命令,shell解释并执行一条;另一种是批处理,即shell脚本
2.shell脚本
一个shell程序,被称为一个脚本,shell脚本是将各种命令通过逻辑语句组合而成的程序,是一种很容易使用的工具,它可以通过将系统调用,公共程序,工具,和编译过的二进制程序粘合在一起来建立应用.
3.shell脚本的作用Shell脚本可以批量的,更便捷的,更灵活的管理系统任务和其它的重复工作的例程。
4.shell脚本的编写格式
一个完整的脚本应该包括“脚本声明”“注释信息”和“可执行语句”
脚本声明即 #!
#!/bin/bash shell当前运行环境所用的解释器
5.如何运行脚本
方法一:sh (name.sh )脚本的名称
方法二:
chmod +x 脚本名称
然后在根目录下使用绝对路径调用
编辑shell脚本的规范:
要使得vim自动添加脚本的说明信息,如下:
vim /etc/vimrc
66 map <F4> ms:call WESTOS()<cr>'s
67 function WESTOS()
68 call append(0, "######################################" )
69 call append(1, "#Author :lee #" )
70 call append(2, " Email :lee@westos.com #" )
71 call append(3, "#Version :1.0 #" )
72 call append(4, "#Create_Date :".strftime("%Y-%m -%d")." #" )
73 call append(5, "#Description : #" )
74 call append(6, "######################################" )
75 call append(7, " ")
76 call append(8, "#!/usr/bin/env bash")
77 endfunction
vim name.sh
按F4可直接导入:
1.diff
比较两个文件的不同
diff
[num1,num2][a|c|d][num3,num4]
a 添加
c 改变
d 删除
num1,num3 第一个文件的内容
num3,num4 第二个文件的内容
diff -r /mnt/westos/ /mnt/linux/ ##比较两个目录的不同
diff -u file file1 > file.path ##比较两个文件的不同,并将不同处写入到.path文件中
yum install -y patch
patch file file.path ##.path 文件写入到源文件中
patch -b file file.path #-b标示备份原文件为file.orig
2.grep
grep -n 要过滤的参数 ##过滤行并显示行号
grep -n3 ##过滤行以及周围的3行
grep -A3 ##过滤并显示后3行
grep -B3 ##过滤并显示前三行
grep -i ##过滤时不区分大小写
grep -v ##过滤掉
grep -E ##同时过滤多个条件
grep ^test ##过滤句子中以test开头
grep test$ ##过滤句子中以test结尾
grep "\<test" ##过滤文件中以test单词为头
grep "test\>" ##过滤文件中以test单词为尾
grep hello -r /mnt/ ##找出某个内容所在的目录
3.
cut ##截取
cut -c 1-4|1,4 ##截取文件中每一行前4个字符 或者第1个和第4个字符
cut -d : -f 1,7 | -f 1-3 ##以" : " 为间隔符,截取文件中 第1列和第7列
cut -d : -f 1,7 | -f 1-3 ##以" : " 为间隔符,截取文件中 第1列和第7列
显示系统中可以登陆的用户
4..awk
TEST="#################################"
awk -F 分隔符 -v TEST=$TEST 'BEGIN {print TEST} {print $2} END{print TEST}' /etc/passwd
awk -F ":" -v TEST=$TEST 'BEGIN {print TEST ":"} {print $2} END{print TEST}' /etc/passwd
awk '/aa/' file 显示含有aa的行。
awk '{print $1, $2}' file 显示第一第二字段。
awk '/aa/{print $1, $2}' file 将含有aa的行的第一和第二个字段显示出来。
awk -F: '/^root/{print $1, $2}' /etc/passwd 指定:为分隔符,打印第一和第二字段。
awk -F: 'BEGIN{OFS="+++"}/^root/{print $1, $2}' /etc/passwd 以:为分隔符,打印第一和第二段,而且彼此用+++分开。
显示 脚本后跟的网卡名称的IP
#!/usr/bin/env bash
MESSAGE="$1's IP:"
ifconfig $1 | grep "\<inet\>" |awk -F " " -v MESSAGE="$MESSAGE" 'BEGIN {print MESSAGE} {print $2}'
打印脚本后第一个文件中以“:”为分隔符的第一列,并以hello开头
test=hello
awk -F : -v test=hello 'BEGIN {print test} {print $1}' $1
打印/etc/passwd 中第一行 并且以变量name开头,以end结尾,注意BEGIN后必须跟变量。
[root@client mnt]# awk -F : -v name=$name 'BEGIN{print name} {print $1} END{print "end"}' /etc/passwd
5.echo
echo -n ##不换行输出
echo -e ##处理特殊字符
echo -e "\r \r"
6.sed
sed '1,5s/sbin/westos/g' passwd ##替换1-5行中所有sbin为westos
sed '/lp/,/shutdown/s/sbin/westos/g' passwd ##从“lp" 所在行开始,至“shutdown“所在行截至的行
sed -e 's/sbin/westos' -e 's/nologin/redhat' passwd ##替换sbin为westos,并且替换nologin为redhat
sed -n 5p passwd ##输出第5行
sed ‘s/sbin/westos/g’ -i passwd ##替换并写入到文件
vim file
s/sbin/westos/g
s/nologin/lee/g
sed -f file passwd
修改apche端口为脚本后的第一串数字
#!/usr/bin/env bash
Port=`grep "^Listen" /etc/httpd/conf/httpd.conf`
sed "s/$Port/Listen\ $1/g" -i /etc/httpd/conf/httpd.conf
echo chage $Port to Listen $1
systemctl restart httpd