目录

  • 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参数…。

centos 脚本修改csh里面的值 centos编写shell脚本_Shell_03

centos 脚本修改csh里面的值 centos编写shell脚本_shell_04

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

centos 脚本修改csh里面的值 centos编写shell脚本_正则表达式_05

Cut命令不识别空格,识别tab
先提取出来,再cut

centos 脚本修改csh里面的值 centos编写shell脚本_shell_06

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