初步学完shell脚本编程,经过这篇博客对其小结一下python
shell定义:shell实际上是一个命令解释器,它的做用是解释用户输入的命令和程序shell
shell脚本:咱们能够在文本中输入一系列的命令、控制语句和变量,这一切有机的结合起来就造成了功能强大的shell脚本。编程
经常使用的是bash解释器bash
bash xx.sh编辑器
sh xx.sh函数
./xx.sh(注意是否有权限,没有经过chmod 755 xx.sh 或chmod u+x xx.sh 添加权限)工具
$HOME 家目录字体
$PWD 当前目录 spa
$SHELL 解释器路径命令行
$USER 用户
变量名=变量值 注意等号两边没有空格
撤销变量 unset 变量名
readonly 变量名=变量值(declare -r 变量名=变量值)
静态变量不能撤销,关机或运行完脚本自动失效
变量名=变量值
export 变量名
$n
n为数字,$0表明该脚本名称,$1-$9表明第一到第九个命令行参数,第十个及之后的参数须要用大括号包含,如${10}
$#
获取全部输入参数的个数
$@ 和$*
$@和$*都表示命令行中全部的参数,通常看来没有区别,for循环打印时都是一个个打印,但当用双引号分别将他们括起来,"$@"是分裂的,不是一个总体(for i in "$@"),而“$*”是一个总体
$?
最后一次执行命令的返回状态,若是值为0,证实命令执行正确,非0命令执行不正确
注意:函数中,函数的返回值只能有$?获取,且返回值小于等于255。单独比较大小时,结果也是由$?获取
第一种方式:$((运算式))和$[运算式],运算符之间有没有空格无所谓
第二种方式:`expr 变量1 +-*/% 变量2` 运算符之间有空格 ,要加反引号
[ condition ] 条件与两端括号之间有空格
大小判断
-lt 小于
-le 小于等于
-ge 大于等于
-gt 大于
-eq 等于
-ne 不等于
文件类型判断
-f 文件存在且是一个常规文件
-e 文件存在
-d 文件存在是一个目录
文件权限
-r 有读的权限
-w 有写的权限
-x 有执行的权限
多条件判断
&& 与
|| 或
!逻辑否
if [ 条件判断式 ];then
fi
if [ 条件判断式 ]
then
fi
if [ 条件判断式 ]
then
else
fi
if [ 条件判断式 ]
then
elif [ 条件判断式 ]
then
fi
case $变量名 in
“值1”)
程序
;;
“值2”)
程序
;;
*)
都不是
;;
esac
for 循环
for ((初始值;条件;;变量变化))
do
程序
done
for 变量 in 值1 值2 值3
do
程序
done
while 循环
while [ 条件判断式 ]
do
程序
done
read(选项)(参数) 变量
读取输入赋值给变量
-p 指示读取值时的提示符
-t 指定读取值时等待的时间
read至关于python中的input
read -t 7 -p “enter your choice” NAME
basename [string/pathname]
basename [string/pathname] [suffix]
basename 会只保存路径的最后一项,只剩文件名
dirname函数与basename做用相反,截取内容相反
获取执行脚本的路径
pw=$(cd `dirname $0`;pwd)
[function] funcname[()] function ,()可写可不写
{
程序
[return xx]
}
返回值由$?获取,返回值(0-255)
注意:必须在调用函数地方以前,先声明函数
一个脚本使用另外一个脚本的函数
. 脚本名
函数名
cut 命令从文件的每一行剪切字节,字符等数据,并将符合的数据输出
cut [选项参数] filename
默认分隔符是制表符
参数 -f 提取第几列
-d 分隔符 按照指定分割符分割列
2.sed
sed是一种流编辑器,它一次处理一行内容把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区中的内容送往屏幕
接着处理下一行,这样不断重复,知道文件末尾,注意文件的内容没有被改变,除非你使用重定向存储输出
sed [选项参数] 命令 filename
选项参数
-e 有多个命令时使用
-n 只显示处理过的行
命令参数
a 新增
d 删除
s 查找并替换
sed -n '1,/内容/'p 文件 显示第一行到包含匹配内容的那一行
sed -n 'num'p 文件 显示第num行
sed “na 内容” 文件名 在n行后加上内容
sed "s/旧 内容/新内容/g" 文件名 替换,g全局替换,不然只换一个
sed -e "nd" -e "s/旧内容/新内容/g" 文件名 删掉第n行并替换内容
awk是一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符,将每行切开,切开的部分再进行分析处理。
命令格式:
awk [选项参数] 'pattern{action1} pattern {action2}.....' 文件名
pattern 表示awk在数据中查找的内容,就是匹配模式 (/内容/ 是匹配格式)
action在找到匹配内容时所执行的一系列命令
在开始和结束地方加上新的内容
BEGIN 在全部数据读取前执行,END在读取全部数据后执行
FILENAME 文件名
NR 已读的记录数(执行到第几行)
NF浏览记录的域的个数(切割后,列的个数)
显示文本空行行数与具体行号
提取特定文本
统计文本有几行
查找文件空行所在的行号
$0表明一行全部内容,$1-$9表明第一列到第九列
sort 工具
将文件进行排序,并将排序结果标准输出
sort(选项)(参数)
-n 依照数值大小排序
-r 以相反顺序排序
-t 设置排序使用的分割字符
-k 指定须要排序的列
参数:指定须要排序的文件
求一列的和
>>追加
>写入(覆盖写)
2> 重定向标准错误
2>>重定向标准错误
&>重定向标准输出和标准错误
前面的内容交给后面处理
判断输出内容有几行
echo 内容 输出一行默认换行
单独echo 至关于空行
echo -e 内容 能够转义字符 (\n,\t)
echo -n 内容 不转义字符
echo 注意事项:
echo “内容” 与 echo '内容'区别
双引号能够包含变量,但单引号不能解析变量
反引号能够解析命令
echo -e “\033[x;ym 内容 \033[0m”
x 字体颜色 30~37
y 背景颜色 40~47
输出文件前10行
find 搜索区域 -name 文件名 以名字查询文件(模糊查询用*)
find 搜索区域 -perm 权限 根据权限查询
find 搜索区域 -user 用户 根据使用者查询
find 搜索区域 -type 文件类型(d,f) 根据文件类型查找
find 搜索区域 -size 文件大小 根据文件大小查询(+大于,-小于,c字节,k,M)
find 搜索区域 -mtime 时间 根据修改时间查找(+超过多少天,-在几天内)
grep “匹配内容” 文件名
grep -c ‘匹配内容’ 文件
grep -n ‘匹配内容’ 文件
grep -i "匹配内容" 文件 忽略大小写
grep -v “内容xx” 文件 不包含内容xx的行(除去特定行)
grep -E “^xx”/"xx$" 以xx开始和以xx结束(-E表明使用正则)
grep -E ".+xx.+" 内容xx 在行中间
grep -E "^$" 文件 匹配空行
grep -E “(xx)+” 文件 匹配屡次出现一次或屡次xx的行
grep -E “(xx){num}” 文件 匹配连续出现num次的xx行
uniq -c 文件 打印紧挨着的重复行次数与内容(重复但隔着的不打印)
uniq -d 文件 只打印重复的行
split -n 被分割文件 保存文件 每n行分割,保存到文件中
rpm -qa | grep 服务名
nc -w num ip 端口名 有正常的显示,服务正常
cat <<eof
内容
eof
cat <<eof 至关于echo,能一次输出多行字符串,包括变量