shell 基本指令
1、常量
$HOME /home
$WPD 当前路径
$USER home
$SHELL /bin/bash
2、变量
21、基本变量常识
= 等号左右两边不可有空格
export D 设置全局变量
22、特殊变量
$n 描述输入脚本参数 其中$0 为脚本本身名字 $1-9 为输入到脚本后的参数
$# 描述输入脚本参数的个数
$* 描述输入脚本的所有参数
$? 描述上一条指令是否执行成功 如果执行成功返回0 如果执行失败则是其他数字
3、运算符
三种表达方式
expr + - \* / % 加减乘除 取余
$(())
$[]
4、条件判断
41、基本语法 [ 条件 ] [] 内条件左右都有空格 条件wield真返回True 条件为假返回False
42、常用判断条件
= 字符窜比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
42、按照文件权限进行判断
-r 可读
-w 可写
-x 可执行
44、按照文件类型进行判断
-f 判断文件是否为一个文件
-e 判断文件是否存在
-d 文件存在是否一个目录
45、多条件判断
&& 表示前一条命令执行成功才会执行下一条命令 echo "dagljsag" && echo "434343"
|| 表示前一命令执行失败才会执行下一条命令 echo "dagljsag" && echo "434343"
5、流程控制
51、基本语法
if [ $1 -eq 1 ]
then
echo "正确"
elif [ $1 -eq 2 ]
then
echo "错误"
fi
52、case基本语法
case $1 in
"1")
echo "dlajlgjs"
;;
"2")
echo "da;lgjfdjg"
;;
esac
53、for循环
基本语法
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
54、while [ $1 -eq 1]
do
程序
done
6、读入数据
read -p "please" number 表示读取number数据
read -t 7 -p "please" number 表示等待7s再读取number数据
7、函数
7.1 basename 截取地址中文件的名字
basename /home/data/oo.txt -> oo.txt
basename /home/data/oo.txt .txt -> oo
7.2 dirname 截取地址中除了文件的名字
dirname /home/data/oo.txt -> /home/data/
7.3 自定义函数
[ function ] funname[()]
{
action;
[return int;]
}
funname
8、特殊指令
8.1 cut 切分地址
cut -d : -f 1 以:切分取第一列
cut -d " " -f 2 以空格切分取第2列
8.2 sed 对内容编辑
基本参数
-e 在指令列连续进行sed操作
-a 新增第几行 sed "2a 美女" 在第二行新增 美女
-d 删除指定内容 sed "/ok/d" 删除ok所在的行
-s 替换内容 sed "s/ok/po/g" 将ok全部替换为po g为全局替换
8.3 awk 文本分析工具
基本参数
-F 指定输入文件拆分隔符
-V 赋值一个自定义变量
内置变量
FILENAME 文件名
NR 条件所在行
NF 按条件所在行分割的列数
基本用法
awk -F : '匹配模式 {指令}' 文件名字
eg: awk -F : '/^root/ {print $1}' passwd 以:为分隔符,匹配/root/的所有行 并打印第1列
awk -F : -V i=1 '/^root/ {print $1 +i }' passwd 以:为分隔符,匹配/root/的所有行 并打印第1列并+1
8.4 sort
常用参数
-n 按照数值大小排序
-r 降序 (默认为升序)
-h 按照文件大小排序
-k 指定从第几列排序
-t 指定分隔符
-u 去重
-m 同时查看多个文件
-o 排序后的值写入文件(可直接修改文件)
基本用法
du -sh /etc/* | sort -h -r
sort -u file.txt
sort -m file1.txt file2.txt file3.txt
sort -n file.txt -0 file.txt 排序后的值覆盖的原文件
8.5 grep 检索文本
常用参数
-i 忽略大小写
-c 统计匹配的行数
-v 取反,不显示匹配的行-i
-w 匹配单词
-n 显示行号
基本用法
grep -n "root" /etc/passwd 查看/etc/路径下所有带root的路径并显示行号
grep "/bin/bash" /etc/passwd | wl -l 统计/etc/passwd路径下所有带有/bin/bash 路径 的文件数量
grep -nv "root" /etc/passwd 查看/etc/路径下所有不带root的路径并显示行号
grep -ni "root" /etc/passwd 查看/etc/路径下所有不带root的路径并显示行号,忽略大小写