Shell脚本编程学习记录php
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。linux
Shell 编程跟 JavaScript、php 编程同样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就能够了。web
Linux 的 Shell 种类众多,常见的有:正则表达式
vim shell.shshell
#!/bin/bash //声明脚本解释器,这个‘#’号不是注释,其他是注释apache
#Program: //程序内容说明编程
#History: //时间和做者vim
使用一个定义过的变量,只要在变量名前面加美圆符号便可,如:bash
your_name="qinjx"编辑器
echo $your_name
echo ${your_name}
使用 readonly 命令能够将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bash
myUrl="http://www.google.com"
readonly myUrl
myUrl="http://www.runoob.com"
运行脚本,结果以下:
/bin/sh: NAME:This variable is read only.
使用 unset 命令能够删除变量。语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
运行shell时,会同时存在三种变量:
a=123
read name
b=$(ls /home) 把命令的执行结果赋值给变量
echo $a
let a=a+1
系统变量
$0 这个程序的执行名字
$n 这个程序的第n个参数值,n=1...9
$* 这个程序的全部参数
$# 这个程序的参数个数
$$ 这个程序的PID
$! 执行上一个背景指令的PID
$? 上一个指令的返回值
文件比较运算符
-e filename 若是 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 若是 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 若是 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 若是 filename 为符号连接,则为真 [ -L /usr/bin/grep ]
-r filename 若是 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 若是 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 若是 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 若是 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt/etc/services ]
filename1 -ot filename2 若是 filename1 比 filename2 旧,则为真 [ /boot/bzImage -otarch/i386/boot/bzImage ]
字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string 若是 string 长度为零,则为真 [ -z "$myvar" ]
-n string 若是 string 长度非零,则为真 [ -n "$myvar" ]
string1 = string2 若是 string1 与 string2 相同,则为真 [ "$myvar" = "onetwo three" ]
string1 != string2 若是 string1 与 string2 不一样,则为真 [ "$myvar" !="one two three" ]
算术比较运算符
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -gt num2 大于 [ 3 -gt $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]
find . -name "*.text" //在当前目录下查找已txt为后缀的文件
fing .-name "[a-z]*" //在当前目录下查找开头字母的文件
find /etc -name "host*" //查找/etc目录下以host开头的文件
find . -perm 755 //在当前目录下查找属性为755的文件
find -user root //在当前目录下查找属主为root的文件
find /var -mtime -5 //在/var下查找更改时间在5天内的文件
find /var -mtime +3 //在/var下查找更改时间在3天之前的文件
find /etc -type d //查找文件类型为d的目录文件
find /etc -typt l //查找文件类型为l的连接文件
find . -size +1000000c //查找文件大小在1M的文件
^linux //以linux开头的
$php //以php结尾的
. //匹配任意单字符
.+ //匹配任意多个字符
.* //匹配0个或多个字符
[0-9a-z] //匹配[]内任意一个字符
(linux)+ //出现屡次linux单词
(web){2} //web出现了2次以上
\ //转译
grep "li qq"* //在全部文件中查找li qq文件
grep -c "file" a //在文件中查找有多少行匹配到file
grep -n "file" a //在文件中查找有多少行匹配file,同时显示行和行号
grep -i "file" a //在文件中查找file,并不区分大小写
grep -v "file" a //在文件中过滤掉file所在的行
grep -E "2017:22:5[0-9]" a //在文件中查找在时间在2017:22:50到59的所在行
grep -E "^[^210]" a //在文件中查找不号寒210的行
grep -E "h*p" a //查找包含h和p的行
grep -E "[5-8][6-9][0-3]" a //查找大于560小于893的行
grep -E "^d" a //在文件中查找以d开头的行
grep -E "^[^d]" a //在文件中查找不是以d开头的行
简介:awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤其强大。简单来讲awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各类分析处理。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其余文本操做。完整的awk脚本一般用来格式化文本文件中的信息。
一般,awk是以文件的一行为处理单位的。awk每接收文件的一行,而后执行相应的命令,来处理文本。
格式:awk '{pattern + action}' {filenames}
pattern:查找内容
action:匹配规则
awk '{pring $0}' access.log //查找文件中的每一列
awk '{print $1"\t"$7}' access.log //查找文件中第一列和第七列
cat file | awk '$0 !~ /192.168.31.25/'|grep "php" //匹配Ip 地址的统计,!~为不匹配
例:for i in `cat /etc/passwd | head | awk -F:'{print $1}'`
do
echo $i
done
-F---以什么符号分割
head---去前多少行,默认是10行
简介:sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认状况下,全部的输出行都被打印到屏幕上。
选项 |
功能 |
-e |
进行多项编辑,即对输入行应用多条sed命令时使用 |
-n |
取消默认的输出 |
-f |
指定sed脚本的文件名 |
sed -n '2'p file //只打印第二行,不打印其余行
sed -n '1,4'p file //从第一行到第四行的记录
sed -n '/los/'p file //打印匹配los的行
sed -n '4,/los/'p file //打印从第四行到匹配los的之间全部行
sed '1,2'd file //吧第一行和第二行所有删除
简介:uniq命令用于报告或忽略文件中的重复行,通常与sort命令结合使用。
语法 uniq(选项)(参数)
选项:
-c或——count:在每列旁边显示该行重复出现的次数;
-d或--repeated:仅显示重复出现的行列;
-f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
-s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
-u或——unique:仅显示出一次的行列;
-w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。
uniq -c file //打印紧挨的重复行出现的次数
uniq -d file //只打印重复的行
awk '{print $1}' /var/log/httpd/access_log | sort|uniq -c //把apache网站的全部访问ip所有统计出来,并打印出统计次数。
简介:能够将一个大文件分割成不少个小文件,有时须要将文件分割成更小的片断,好比为提升可读性,生成日志。
语法:split(选项)(file)PREFIX
选项:
-b:值为每一输出档案的大小,单位为 byte。
-C:每一输出档中,单行的最大 byte 数。
-d:使用数字做为后缀。
-l:值为每一输出档的列数大小。
PREFIX:表明前导符,可做为切割文件的前导文件。
split -2 file spt //生成fileab,fileac....fileai等多个文件,把a文件每行分割成一个文件,每一个文件的前缀都是以file开头的。