《Linux Shell脚本攻略》读书笔记

简介: 《Linux Shell脚本攻略》读书笔记

《Linux Shell脚本攻略》是一本适合初学者系统学习Bash Shell的书籍,墙裂推荐。以下是我阅读这本书的笔记,希望对读者有用。


  1. 输出颜色字符


echo -e "\e[1:41m" # 1表示背景色


  1. echo打印!需转义
echo "hello, bash!"  # 报错,因为!在shell中属于特殊字符,需要转义
echo "hello, bash\!" # 不报错,!已转义
echo 'hello, bash!'  # 不报错,在单引号中!无需转移



  1. printf可用于格式化输出
# 用法类似C中的`printf`
printf "format"  var1 var2 ...



  1. echo常用选项
echo -n  # 不在字符串末尾添加换行符
echo -e  # 支持转义字符表示
echo -e "\e[id XXXXXX" # 显示颜色字体,其中id表示背景颜色id



  1. pgrep
# 根据进程名获取进程id
pgrep <进程名>           # 相当于ps -ef  
cat /proc/$PID/environ  # 查看进程运行过程中的环境变量



  1. 用(())进行算数运算
# 计算两个数之和,有以下两种写法:
c=$((a+b))   # 赋值方式1
((c = a+b))  # 赋值方式2



  1. 输出重定向
# 将标准输出和标准错误输出重定向到run.log中
./binary >run.log 2>&1 
# 更简洁的写法:注意&和>之间不能有空格 
sh mybash.sh &>run.log



  1. 用exec创建文件描述符
exec 4 < log.txt
exec 5 > log.txt
exec 6 >> log.txt



  1. 哈希数组
# 声明
declare -a map 
# 定义
${map[key]}=value
# 获取所有key
${!map[@]}
declare -a HTTP_RESPONSE=(
        [200]="OK"
        [400]="Bad Request"
        [403]="Forbidden"
        [404]="Not Found"
        [405]="Method Not Allowed"
        [500]="Internal Server Error"
)



  1. date获取时间
# 显示秒数
date +%s 
# 将秒数转成字符串
date -d @秒数



11 tput控制终端光标

# 设置光标位置
tput cup 行号  列号
# 保存光标位置
tput sc 
# 回到保存的光标位置
tput rc
# 清除当前光标到行尾
tput ed



  1. read读取标准输入
# 设置不回显
read -s
# 设置超时时间 
read -t 
# 设置读入字节数
read -n 字节数
# 设置提示
read -p "please input passwd"



  1. cat显示文件内容
# 显示时忽略多余的空行 
cat -s file
# 显示每一行的行号
cat -n file 
# 打印出制表符
cat -T file



  1. 用find进行文件搜索
# 打印符合搜索条件的文件或目录
find <path> -name XXX  -print 
# 删除符合条件的文件或目录
find  <path> -name XXX -exec rm -rf {} \;



  1. xargs:从标准输入拼装命令
# 常用用法
cat file | xargs
# 设定每行的字段数
cat file | xargs -n 3 
# 以null为换行符
cat file | xargs -0
# 代替命令中位置
cat file | xargs -I{} rm -rf {}



  1. tr: 替换或删除标准输入的字符
# 替换 
tr  字符集1 字符集2 
# 删除
tr -d 字符集
# 补集
tr -d -c 要留下的字符集
# 去除重复空格
tr -s " "



  1. md5sum: 对文件生成md5 checksum
# 生成md5值
md5sum file  > file.md5
# 校验 
md5sum -c file.md5



  1. sort: 对文件内容进行排序
# 按照字符串排序 
cat file | sort 
#按照数字排序
cat file | sort -n 
# 逆序排序
cat file | sort -r
# 按照某列排序 
cat file | sort -k 列数



  1. dd:复制并转换文件
# 从/dev/zero生成文件 
dd if=/dev/zero of=data.file bs=100k count=1



  1. split:分割大文件
# 将文件分成大小为10k的小文件,且小文件命名中后缀长度为3
split data.file -b 10k -a 3



  1. 字符串分割
# 获取文件后缀
echo ${filename##*.}
# 获取文件名
echo ${filename%.*}



  1. 单词表
cat /usr/share/dict/words



  1. expect: 自动化交互式输入
# expect 
spawn  ./interactive.sh 
expect "Password:"
send "XXX\n"



  1. comm: 求两个文件的交集/差集/并集
# 求差集a-b
comm a.txt b.txt -1
# 求a+b并集
comm a.txt b.txt 
# 求ab交集
comm a.txt b.txt -1 -2



  1. chattr: 修改文件属性
# 将文件设置为不可修改
chattr +i file
# 去除不可修改属性
chattr -i file



  1. 寻找软连接
# 方法一
ll -rt | grep -P "^l" | awk '{print $8}'
# 方法二
find . -type l



  1. diff: 比对两个文件(或目录)
diff -abru 1.txt 2.txt 
diff -abru 1.txt 2.txt > 12.patch



  1. patch: 对文件打补丁
patch -p1 1.txt < 12.patch



  1. 命令行当前目录管理
# pushd: 将当前目录压入栈中
# popd: 从栈中弹出目录,并作为当前目录
# dirs: 显示栈中目录
# 常规用法
pushd  directory
popd
# 指定目录
dirs
pushd +N
popd +N



  1. grep: 搜索文件内容
# 匹配内容显示颜色
grep --color=auto 
# 统计匹配行数
grep -c 
# 显示匹配行号
grep -n 
# 显示匹配字符偏移量
grep -o -b
# 显示匹配文件列表
grep -l  1.txt 2.txt
# 使用文件匹配
grep -f pattern.txt  file.txt
# 静默模式
grep -q 
# 定位代码
grep -R -n 
# 忽略大小写
grep -i 
# 匹配多个样式
grep -e pattern1 -e pattern2
# 显示匹配行之前N行
grep -A 
# 显示匹配行之后N行
grep -B 
# 显示匹配行之前之后N行
grep -C



  1. sed: 文本过滤和转换工具
# sed "s///" 替换
echo  "hello wolrd" | sed "s/hello/goodbye/"
# sed -i 替换文件内容
sed -i 's/hello/goodbye/' 1.txt
# sed 's///g' 替换所有匹配内容
echo "thisthisthisthis" | sed 's/this/THIS/g'
# sed 's///ng' 从第n处匹配开始替换
echo "thisthisthisthis" | sed 's/this/THIS/2g'
# sed '//d' 删除匹配行
cat diff.sh | sed '/^$/d' 
# 匹配字符串标记
echo this is an example | sed 's/\w\+/[&]/g'
# 捕捉字符串
echo "this is a digit 7 in a numbger" | sed 's/digit \([0-9]\)/\1/'



  1. paste: 合并文件
# 按列合并文件
paste file1 file2
paste file1 file2 -d  ","



  1. rev: 字符串逆序输出
echo "1234" | rev



  1. tac: 对多行文件逆序输出
# 行逆序
seq 1 10 | tac



  1. 设置命令行编辑模式
set -o vi
相关文章
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
116 1
|
3天前
|
消息中间件 Java Kafka
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
70 2
6种方法打造出色的Shell脚本
|
1月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
36 0
Linux 如何更改默认 Shell
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
65 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
62 2
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
80 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
Ubuntu Linux Shell
Linux 系统中的代码类型或脚本类型内容
在 Linux 系统中,代码类型多样,包括 Shell 脚本、配置文件、网络配置、命令行工具和 Cron 定时任务。这些代码类型广泛应用于系统管理、自动化操作、网络配置和定期任务,掌握它们能显著提高系统管理和开发的效率。
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
62 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。