PyOWM核心功能详解:从天气预报到空气质量监测的完整API覆盖
2026/6/10 10:33:06
Shell 是命令解释器
功能:
支持:
name=string等号两边不能有空格
变量名规则:
echo$name$name→ 变量替换
引号规则:
" ":允许变量替换' ':不允许变量替换局部变量
全局变量
export导出exportvar由 shell 预定义并赋值
决定系统行为,如:
PATHHOMESHELL全部是全局变量
set# 查看所有环境变量echo$PATH# 引用环境变量PATH=/tmp:$PATH系统级
/etc/profile用户级
~/.bash_profile~/.bashrc;cmd1;cmd2$?0→ 成功非 0→ 失败| 符号 | 含义 | |
|---|---|---|
&& | 前成功,才执行后 | |
| ` | ` | 前失败,才执行后 |
lsdir||mkdirdir&&touchdir/file👉 实现:
grep[选项]'模式'文件| 选项 | 作用 |
|---|---|
-n | 显示行号 |
-i | 忽略大小写 |
-v | 反向匹配 |
-A n | 显示后 n 行 |
-B n | 显示前 n 行 |
--color=auto | 关键字高亮 |
dmesg|grepIPv6| 符号 | 含义 |
|---|---|
. | 任意一个字符 |
* | 前一个字符重复 0~∞ 次 |
[abc]# a 或 b 或 c[a-z]# 小写字母[^a-z]# 非小写字母| 符号 | 含义 |
|---|---|
^ | 行首 |
$ | 行尾 |
^$ | 空行 |
o\{2\}# 正好 2 个 oo\{2,5\}# 2~5 个 oo\{2,\}# 至少 2 个 o| 需求 | 正则 |
|---|---|
| 包含数字 | [0-9] |
| 任意数字串 | [0-9][0-9]* |
| g 开头 g 结尾 | g.*g |
| 类型 | 描述 |
|---|---|
| 输入 | < |
| 输出 | > |
| 追加 | >> |
| 错误 | 2> |
| 全部 | &> |
ls>filels2>err cmd&>all.log/dev/nullgrepIPv6 /etc/*2>/dev/null|catfile|grepkeywordls/etc|moretail-15file|head-3rpm-qa|grepsshShell ├── 变量 │ ├── 普通变量 │ ├── 作用域 │ └── 环境变量 ├── 命令控制 │ ├── ; │ ├── && │ └── || ├── 文本处理 │ ├── grep │ └── 正则表达式 ├── I/O 控制 │ ├── 重定向 │ └── 管道.txt文件的行数你有很多.txt文件,想快速知道每个文件有多少行,并按行数从小到大排序。
wc-l *.txt|sort-nwc -l
👉 统计行数(word count 的 line 模式)
*.txt
👉 匹配当前目录下所有.txt文件
|(管道)
👉 把前一个命令的输出,传给下一个命令作为输入
sort -n
👉 按数字大小排序(而不是按字符串)
12 a.txt 58 b.txt 134 c.txt表示:
a.txt有 12 行b.txt有 58 行c.txt有 134 行wc-l *.txt|sort-n|head-3grep"error"*.log👉 在当前目录所有.log文件中查找包含error的行
常用变体:
grep-i"error"*.log# 忽略大小写grep-n"error"*.log# 显示行号ls|wc-l👉 统计当前目录文件数(不含隐藏文件)
包含隐藏文件:
ls-a|wc-l把.txt改成.md:
forfin*.txt;domv"$f""${f%.txt}.md"done👉${f%.txt}是 Shell 的字符串截取
du-sh *|sort-h|tail-5👉 找出当前目录下最大的 5 个文件/目录
catfile.txt|tr' ''\n'|sort|uniq-c|sort-nr👉 常用于文本分析、面试题
if[-f"test.txt"];thenecho"文件存在"elseecho"文件不存在"fipsaux|sort-nrk3|head-5👉 第 3 列是 CPU 使用率
每 5 分钟执行一次脚本:
*/5 * * * * /path/to/script.shpsaux|grepjava|grep-vgrep|awk'{print$2}'|xargskill-9#!/bin/bashforfin*.log;doecho"$f行数:$(wc-l<"$f")"done运行前记得:
chmod+x count.sh ./count.shprint.sh
#!/bin/bashif[$#-eq0];thenecho"用法:$0参数"exit1fiecho"你输入的参数是:$1"运行:
./print.sh hellobackup.sh
#!/bin/bashSRC_DIR=/data/logsBACKUP_DIR=/data/backupDATE=$(date+%Y%m%d)mkdir-p"$BACKUP_DIR"tar-czf"$BACKUP_DIR/logs_$DATE.tar.gz""$SRC_DIR"echo"备份完成: logs_$DATE.tar.gz"readfile.sh
#!/bin/bashwhilereadline;doecho"读取到:$line"done<users.txtcount_file_type.sh
#!/bin/bashtxt=0log=0forfin*;docase"$f"in*.txt)((txt++));;*.log)((log++));;esacdoneecho"txt 文件:$txt"echo"log 文件:$log"check_service.sh
#!/bin/bashSERVICE=nginxifpgrep"$SERVICE">/dev/null;thenecho"$SERVICE正在运行"elseecho"$SERVICE未运行"ficlean_log.sh
#!/bin/bashLOG_DIR=/var/log/myappfind"$LOG_DIR"-type f -mtime +7 -name"*.log"-execrm-f{}\;echo"7 天前日志已清理"menu.sh
#!/bin/bashecho"1) 查看磁盘"echo"2) 查看内存"echo"3) 退出"read-p"请选择: "choicecase$choicein1)df-h;;2)free-h;;3)exit;;*)echo"无效选择";;esac#!/bin/bashset-e# 变量定义# 函数定义# 主逻辑chmod+x xxx.sh# 没权限bashxxx.sh# 直接用 bash 运行。