shell脚本概述

read -p “请输入” 输入 echo 输出 cut 切割 sort 排序
uniq 去重 wc 计数 find 查找文件或其他 xargs 接着执行下一条命令
奇数 echo {1…10…2}
偶数:echo {2…10…2}
整数计算:echo $((1+1))
随机数 echo ( ( (( ((RANDOM%100+1))

1.掌握shell脚本语法
开头:#!/bin/sh或#!/bin/bash
符号#!用来告诉系统它后面的参数是用来执行该文件的程序
注释:
以#开头的行表示注释
命令行的书写规则:
一行一条命令
若一行多个命令,用分号(;)分割
长命令可以使用反斜线字符(\)
2.掌握变量的使用

了解系统变量
系统定义的变量	意义
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	当前登录的用户名

3.掌握用户自定义变量
特殊变量 含义

$$	Shell本身的PID(ProcessID)
$!	Shell最后运行的后台Process的PID 
$?	最后运行的命令的结束代码(返回值) 
$-	使用Set命令设定的Flag一览 
$*	所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。
$@	所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。 
$#	添加到Shell的参数个数
$0	Shell本身的文件名 
$1$n	添加到Shell的各参数值。$1是第1参数、$2是第2参数…。 

变量的赋值
变量的赋值使用“=”
例子:
x=6
a=“welcome to beijing”
单引号:所有转移符全部关闭,完整的反应括号中的内容
双引号:部分转义符关闭,但某些则保留(如:$ )
反引号:反引号内荣作为一个系统命令并执行
变量的调用read 输入
在变量名前面加一个$符号
read从键盘读变量
read -ep “提示信息” 变量名
例子:
read –ep “请输入你的用户名” username
4.掌握cut功能:从一行中切割部分内容
选项:
-d:设置分隔符
-f:指定分割后的域
-c:按字符分割
实例:
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列
5.掌握sort功能:排序
选项:
-r:逆序
-t:设置分隔符
-n:使用纯数字排序
+a: 从分隔后的第a域开始 -b:到分隔后的第b个域结束 注:分隔后的列是从0开始计数
-u:重复行仅显示一次
-k: 按照第几个域排序
实例:
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
查看以前登录信息,并合并相同行
cat passwd|sort -t: -k3 -n
查看passwd文件按照冒号分隔开的第三个域排序
6.掌握uniq功能:过滤重复行 去重
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
选项:
-d:仅显示重复行
-u:仅显示非重复行
-c:显示行连续重复的次数
实例:
last | cut -d“ ” -f1 | uniq –u
列出以前用户登录的信息的,以空格分隔的第1列,并且只显示不重复行
last | cut -d“ ” -f1 | uniq –d
列出以前用户登录的信息的,以空格分隔的第1列,并且只显示有重复数据行,每种重复行只显示一行
last | cut -d“ ” -f1 | uniq –c
列出以前用户登录的信息的,以空格分隔的第1列,并且打印每一重复行出现次数
7.掌握wc功能:计数
选项:
-l : 多少行
-m : 多少字符
-w : 多少字(空格,制表符,换行符隔开的)
实例:
cat /etc/passwd | wc -l
查看/etc/passwd里有多少行
8.掌握find命令的用法 查找
find命令选项基本格式
find 目录 -选项 动作[-print -exec -ok …]
find命令基本选项与使用方法
-name 按照文件名查找文件。
通配符:*:任意长度的字符串 ?:任意一个字符 [ ]:取值范围内的一个字符 [0-9]数字 [a-zA-Z]字母
-perm 按照文件权限来查找文件。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/group中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! newer file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:
d - 目录。
l - 符号链接文件。
f - 普通文件
-size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-mtime -n +n 按文档更改时间来查找文档,-n指n天以内,+n指n天以前(modify)
-atime -n +n 按文档访问时间来查(access)
-ctime -n +n 按文档创建时间来查找文档,-n指n天以内,+n指n天以前 (create)
amin cmin mmin 分别是按照访问 创建 更改文件的分钟计时
-maxdepth n 查找的最大目录深度 层数
-mindepth n 查找的最小目录深度 层数
a)find命令选项的动作,与实现
-print: 将匹配的文件输出到标准输出。
-fprint 文件名:将匹配的文件输出到文件。
-exec:对匹配的文件执行该参数所给出的命令。相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格。
-ok: 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。
b)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

find案例二:在/logs目录中查找更改时间在5日以前的文件并删除它们:

$ find logs -type f -mtime +5 -exec rm {} \;

find案例三:在当前目录中查找所有文件名以.conf结尾、更改时间在5日以上的文件,并删除它们,在删除之前先给出提示。

$ find . -name "*.conf" -mtime +5 -ok rm {} \;
< rm ... ./conf/httpd.conf > ? n

按y键删除文件,按n键不删除。
xargs命令的作用是将参数列表转换成小块分段传递给其他命令,以避免参数列表过长的问题。
案例:查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

find . -type f -print | xargs file

1.掌握字符串测试
格式:
[ str1 opr str2 ] //注意方括号左右两边的空格
[ opr str ]
opr取值:
相等:= //判断两个字符串是否相等
不等:!= //判断两个字符串是否不等
空串:-z //判断字符串长度是否为0,即判断字符串是否为空,为空返回真,非空返回假
非空串:-n //判断字符串长度是否不为0,即判断字符串是否非空,为空返回假,非空返回真
例子:

name=tom; [ -z $name ]; echo $?  
		name2=andy;  [ $name = $name2 ]; echo  $?

2.掌握整数测试
3. 整数比较 需要注意的是 要么使用[]和gt组合 要么使用大于号和双括号组合
格式:
test “num1” opr “num2”
[ “num1” opr “num2” ]
opr 取值:
相等:-eq
不等:-ne
大于:-gt
小于:-lt 【l是字母L的小写】
小于等于:-le
大于等于:-ge
整数测试也可使用let命令或双括号(( )),相关操作符为:== ,!=,>,>=,<,<=
(let 和双圆括号中可以使用算数表达式,而中括号不能,let和双圆括号中,操作符两边可以不留空格)
a)例子:

x=1;[ $x -eq 1 ];echo $?
x=1; let "$x==1";echo $?
x=1;(($x+1>=2));echo $?

4.掌握文件测试
格式:[ opr file ]
opr取值:
目录: -d
普通文件: -f
链接: -L
可读: -r
可写: -w
可执行: -x
文件非空: -s
例子:
在这里插入图片描述
单分支if语句格式:
if [ 表达式 ]; then
操作
fi
在这里插入图片描述
双分支if语句格式:
if [ 表达式 ]; then
操作1
else
操作2
fi

if [ 表达式1 ]; then
操作1
elif [ 表达式2 ];then
操作2
else
操作3
fi
在这里插入图片描述
语法规范
i. if与[之间要有空格
ii. [ ]与判断条件之间也必须有空格
iii. ]与;之间不能有空格
iv. 以fi结尾,表示if语句的结束

掌握case语句
case语句格式:
case 表达式 in
值1|值2)
操作 ;;
值3|值4)
操作 ;;
值5|值6)
操作 ;;
)
操作;;
esac
在这里插入图片描述case语句的语法规范
i. 表达式expr按顺序匹配每个模式,一旦匹配成功,则执行该模式后面的命令块,然后退出case语句
ii. 如果没有找到匹配的模式,则执行默认值“
)”后的命令块, “*)”可以没有
iii. 模式中可以包含通配符或“|”,如果多个模式对应同一个命令块,则使用“|”将各个模式分开
iv. 每个模式必须以右圆括号”)”结束
v. 每个命令块必须以双分号(;;)结束,双分号可独占一行,也可放在最后一斜体样式个命令的后面
vi. 以esac结尾,表示case语句的结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值