《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
相关文章
|
3月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
455 9
|
Ubuntu Linux 网络安全
Linux系统初始化脚本
一款支持Rocky、CentOS、Ubuntu、Debian、openEuler等主流Linux发行版的系统初始化Shell脚本,涵盖网络配置、主机名设置、镜像源更换、安全加固等多项功能,适配单/双网卡环境,支持UEFI引导,提供多版本下载与持续更新。
382 0
Linux系统初始化脚本
|
3月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
3月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
369 2
|
6月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
289 60
|
3月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
5月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
656 1
|
7月前
|
Java Linux
自定义linux脚本用于快速jar包启动、停止、重启
自定义linux脚本用于快速jar包启动、停止、重启
342 29
|
7月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
205 17
|
7月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
448 3