目录
- 1. 概念
- 2. shell脚本语法
- 3. 掌握变量使用
- 了解系统变量
- 4. 掌握用户自定义变量
- 特殊变量
- 5. 变量的赋值
- 6. 变量的调用
- 7. read从键盘读变量
- 8. 掌握cut功能:从一行中切割部分内容 列提取
- 1. 选项
- 2. 实例
- 9. 掌握sort功能:排序
- 1. 选项
- 2. 实例
- 10.掌握uniq功能:过滤重复行
- 1. 选项
- 2. 实例
- 11.掌握wc功能:计数
- 1. 选项
- 2. 实例
- 12.掌握find命令的用法
- 1. find命令选项基本格式
- 2. find命令基本选项与使用方法
- 2. find命令选项的动作,与实现
- 4. find案例一:查找当前目录下所有名称以.sh结尾的文件,判断是否具备执行权限
- 5. find案例二:在/logs目录中查找更改时间在5日以前的文件并删除它们
- 6. find案例三:在当前目录中查找所有文件名以.conf结尾、更改时间在5日以上的文件,并删除它们,在删除之前先给出提示。
- 7. xargs命令的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
1. 概念
- shell是指 “提供使用者使用界面” 的软件(命令解析器)
- 类似DOS下的command和cmd.exe,接收用户命令,调用相应的应用程序
- shell脚本和windows/DOS下的批处理相似,也就是将各类命令预先放入一
- 个文件中,方便一次性执行的一个程序文件,方便管理
2. shell脚本语法
开头:
#!/bin/bash 或 #!/bin/sh 用来执行该文件的程序
注释:
以#开头的行表示注释
命令行书写规则:
一行一条命令
如:cd、pwd
一行多个命令
如:cd;pwd
长命令使用反斜线字符(\)
3. 掌握变量使用
了解系统变量
系统定义的变量 | 意义 |
BASH=/bin/bash | Bash Shell 名称 |
BASH_VERSION=4.1.2(1) | Bash 版本 |
HOME=/home/linuxtechi | 用户家目录 |
LOGNAME=LinuxTechi | 当前登录用户的名字 |
OSTYPE=Linux | 操作系统类型 |
PATH=/usr/bin:/sbin:/bin:/usr/sbin | 可执行文件搜索路径 |
PWD=/home/linuxtechi | 当前工作目录 |
SHELL=/bin/bash | Shell 名称 |
USERNAME=linuxtechi | 当前登录的用户名 |
4. 掌握用户自定义变量
- 在shell 脚本中,所有的变量都由字符串组成,且不需要对变量进行声明。
- 变量只能以字母和下划线开头
特殊变量
特殊变量 | 含义 |
$$ | Shell本身的PID(ProcessID) |
$! | Shell最后运行的后台Process的PID |
$? | 最后运行的命令的结束代码(返回值) |
$- | 使用Set命令设定的Flag一览 |
$* | 所有参数列表。如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 |
$@ | 所有参数列表。如"$@“用「”」括起来的情况、以"$1" “n” 的形式输出所有参数。 |
“$n” | 添加到Shell的参数个数 |
$# | Shell 名称 |
$0 | Shell本身的文件名 |
n | 添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 |
5. 变量的赋值
变量的赋值使用“=”
例子:
x=6
a="welcome to beijing"
单引号:所有转移符全部关闭,完整的反应括号中的内容
双引号:部分转义符关闭,但某些则保留(如:$ )
反引号:反引号内荣作为一个系统命令并执行
6. 变量的调用
在变量名前面加一个$符号
7. read从键盘读变量
read -p “提示信息” 变量名
例子:
read –p “请输入你的用户名” username
8. 掌握cut功能:从一行中切割部分内容 列提取
1. 选项
-d:设置分隔符
-f:指定分割后的域
-c:按字符分割
2. 实例
Grep :提取行 –v 取反
Grep “root” /etc/passwd
Cut命令不识别空格,识别tab
先提取出来,再cut
cut -c1 /etc/grub.conf
显示/etc/grub.conf里第1个字符
cut -c1-20 /etc/grub.conf
显示/etc/grub.conf里第1个到第20个字符
cut -d“:” -f1-3 /etc/passwd
显示/etc/passwd里,以冒号分隔的第1列到第3列
cut -d“:” -f1,3 /etc/passwd
显示/etc/passwd里,以冒号分隔的第1列和第3列
9. 掌握sort功能:排序
1. 选项
-r:逆序
-t:设置分隔符
-n:使用纯数字排序
+a: 从分隔后的第a域开始 -b:到分隔后的第b个域结束 注:分隔后的列是从0开始计数
-u:重复行仅显示一次
-k: 按照第几个域排序
2. 实例
cat /etc/passwd | sort
查看/etc/passwd里的内容并且正向排序
cat /etc/passwd | sort -t: +2n -2n
查看/etc/passwd里的内容,并且以冒号分隔,第3列(uid)按数字正向排序
cat /etc/passwd | sort -t: +2nr -2n
查看/etc/passwd里的内容,并且以冒号分隔,第3列(uid)按数字反向排序
last | sort -u uniq
查看以前登录信息,并合并相同行
cat passwd|sort -t: -k3 -n
查看passwd文件按照冒号分隔开的第三个域排序
10.掌握uniq功能:过滤重复行
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
1. 选项
-d:仅显示重复行
-u:仅显示非重复行
-c:显示行连续重复的次数
2. 实例
last | cut -d“ ” -f1 | uniq –u
列出以前用户登录的信息的,以空格分隔的第1列,并且只显示不重复行
last | cut -d“ ” -f1 | uniq –d
列出以前用户登录的信息的,以空格分隔的第1列,并且只显示有重复数据行,每种重复行只显示一行
last | cut -d“ ” -f1 | uniq –c
列出以前用户登录的信息的,以空格分隔的第1列,并且打印每一重复行出现次数
11.掌握wc功能:计数
1. 选项
-l : 多少行
-m : 多少字符
-w : 多少字(空格,制表符,换行符隔开的)
2. 实例
cat /etc/passwd | wc -l
查看/etc/passwd里有多少行
12.掌握find命令的用法
1. find命令选项基本格式
find 目录 -选项 动作[-print -exec -ok ...]
2. find命令基本选项与使用方法
i.-name 按照文件名查找文件。
ii.通配符:*:任意长度的字符串 ?:任意一个字符 [ ]:取值范围内的一个字符 [0-9]数字 [a-zA-Z]字母
iii.-perm 按照文件权限来查找文件。
iv.-user 按照文件属主来查找文件。
v.-group 按照文件所属的组来查找文件。
vi.-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/group中不存在。
vii.-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
viii.-newer file1 ! newer file2 查找更改时间比文件file1新但比文件file2旧的文件。
ix.-type 查找某一类型的文件,诸如:
a)d - 目录。
b)l - 符号链接文件。
c)f - 普通文件
x.-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
xi.-mtime -n +n 按文档更改时间来查找文档,-n指n天以内,+n指n天以前(modify)
xii.-atime -n +n 按文档访问时间来查(access)
xiii.-ctime -n +n 按文档创建时间来查找文档,-n指n天以内,+n指n天以前 (create)
xiv.amin cmin mmin 分别是按照访问 创建 更改文件的分钟计时
xv.-maxdepth n 查找的最大目录深度 层数
xvi.-mindepth n 查找的最小目录深度 层数
2. find命令选项的动作,与实现
i.-print: 将匹配的文件输出到标准输出。
ii.-fprint 文件名:将匹配的文件输出到文件。
iii.-exec:对匹配的文件执行该参数所给出的命令。相应命令的形式为'command' { } \;,注意{ }和\;之间的空格。
iv.-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
4. find案例一:查找当前目录下所有名称以.sh结尾的文件,判断是否具备执行权限
#!/bin/bash
find . -name "*.sh" -fprint file
for filename in `cat file`
do
if [ -x $filename ];then
echo "$filename 具有执行权限"
else
echo "$filename 不具有执行权限"
fi
done
5. find案例二:在/logs目录中查找更改时间在5日以前的文件并删除它们
$ find logs -type f -mtime +5 -exec rm {} \;
6. find案例三:在当前目录中查找所有文件名以.conf结尾、更改时间在5日以上的文件,并删除它们,在删除之前先给出提示。
$ find . -name "*.conf" -mtime +5 -ok rm {} \;
< rm ... ./conf/httpd.conf > ? n
按y键删除文件,按n键不删除。
7. xargs命令的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
案例:查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件
find . -type f -print | xargs file