shell脚本
定义:脚本就是一条条命令的堆积。常见脚本有:js asp,jsp,php,python
Shell特点:简单易用高效
Shell分类:图形界面(gui shell) 命令行界面(cli界面)
查看可用的shell类型:/etc/shells 查看当前shell类型:echo $SHELL
执行脚本的三种方法:
Bash 脚本名称
添加可执行权限
Source 脚本名称
二.Shell编程常用命令
grep
-i:忽略大小写
-n 打印行号
-o 打印匹配内容
-c 打印匹配的行数
-B 打印匹配的前几行
-A 打印匹配的后几行
-v 打印不匹配的行
cut命令(剪切字符至标准输出)
-c 以字符为单位切割
-d 自定义分隔符
-f 与-d一起使用,指定显示哪个区域
Sort命令
-k 根据切割后的一段排序
-n 依照数值的大小排序
-r 以相反的顺序排序
-u 去除重复行
Uniq命令(去除重复的行)
-c:在行首用数字表示该行出现字数
-u 显示不重复的行
Tr命令(转换或删除)
a - z任意小写
A-Z 任意大写
0-9任意数字
变量
一.定义:用来存放各种数据,编程语言组成部分
变量的命名规则:
变量名由数字 字母下划线组成
必须以字母或者下划线开头
不能使用shell里面的关键词
2.变量的引用:$变量名 或 ${变量名}
3- 已定义的变量可以重新赋值,只读变量不能删除(readonly 变量名)(unset)
变量类型
局部变量 环境变量 shell变量(特殊变量)
特殊变量
$0 当前脚本的文件名
$n 传递给脚本的参数
$# 传递给脚本的参数个数
$* 传递给脚本或函数的所有参数
$? 上个命令的退出状态,或函数的返回值
条件表达式
[ ] 括号的表达式前后都要有空格
整数表达式
-eq 等于
-ne 不等于
-gt 大于
-le 小于
-ge 大于或等于
-le 小于或等于
字符串比较符(字符串比较时要加双引号)
==等于
!= 不等于
-n 字符串不为0为真
-z 字符串为0为真
文件测试符
-e 文件或者目录存在为真
-f 文件存在为真
-d 目录存在为真
-r -w -x 有权限为真
布尔运算符
! 取反
-a 和关系
-o 或者
逻辑判断符
&& 逻辑和,判断是否为真时使用,前者为真执行后面的
|| 如果前面为假,则执行后面的
练习:
- 统计系统中以.sh结尾的文件总大小,输出结果以kb为单位
#!/bin/bash
sum=0
for size in `find /root -name "*.sh" -exec ls -l {} \; | cut -d " " -f 5`
do
let sum+=$size
done
echo "$((sum/1024))kb"
2、统计100以内的偶数和
#!/bin/bash
for i in `seq 2 2 100`
do
let sum+=$i
done
echo "$sum"
3、批量统计主机是否在线
4、输出目录下文件类型到终端
#!/bin/bash
for i in `ls -l | cut -c 1`
do
if [ $i == "-" ];then
echo "文件"
elif [ $i == "d" ];then
echo "目录"
else
echo "其他类型"
fi
done
5、简单的四则运算
6、创建以1-100为开头的文件,输出到终端
#!/bin/bash
for i in {1..100}
do
touch $i.txt
echo $i.txt
sleep 1
done
7.持续检测内存剩余量
#!/bin/bash
while true
do
for i in `free -h | awk -F " +" '{print $4}' | head -2 | grep -v free`
do
echo $i
sleep 1
done
done
8、一键部署nfs服务端
#!/bin/bash
yum -y install nfs-utils rpcbind &>/dev/null
mkdir haha
chmod -R 777 haha/
echo "haha *(rw)" >> /etc/exports
systemctl restart nfs rpcbind
一键部署nfs客户端
#!/bin/bash
yum -y install nfs-utils &>/dev/null
systemctl restart nfs
mkdir haha
showmount -t nfs 192.168.253.10:haha haha
9、统计root目录下以.sh结尾的文件大小