- SHELL 是 Linux/Unix 系统中⽤户与内核(Kernel)之间的 “翻译官 / 中间层” ——内核是操作系 统的核⼼(管硬件、进程、⽂件系统、权限等底层资源),但普通⽤户⽆法直接和内核对话; Shell 作为运⾏在⽤户态的程序,接收你输⼊的命令(⽐如 chmod 、 userdel 、 rm ),把 它翻译成内核能理解的 “系统调⽤”,执⾏后再把结果返回给你。简单说:你敲的每⼀条 Linux 命 令,都是通过 Shell 执⾏的;你写的 .sh 脚本(⽐如之前的 scan.sh ),本质也是 “交给 Shell 逐条解释执⾏的命令集合”。
查看用户当前的用户登录默认SHELL的指令为 echo $SHELL ,$SHELL是Linux内置的环境变量,可以通过指令env | grep SHELL查看(指令env可以查看所有环境变量)


也可通过指令cat /etc/shells来查看系统里已安装的合法 Shell列表。

切换SHELL,可以通过指令chsh -s +想要切换的SHELL

- 调⽤⾃⼰定义的变量标准⽅式
abc="echo "zzb" "

- 查看当前Linux的用户的环境变量
echo $USER

查看某一指令的帮助
man grep
grep --help
- 运算符
Shell 中的运算符是实现数值计算、条件判断、⽂件 / 字符串校验的核⼼⼯具 ⽤于整数加减乘除、取模等,核⼼语法: $(( 表达式 )) (最常⽤)、 let 表达式 、 exp r 表达式 。 实操场景:统计⽤户 coco 的进程数并判断是否⼤于 0 运算符 常⽤运算符分类(按场景优先级)
1. 算术运算符(数值计算)
⽤于整数加减乘除、取模等,核⼼语法: $(( 表达式 )) (最常⽤)、 let 表达式 、 exp r 表达式 。

2.关系运算符(数字⽐较)
仅⽤于整数⽐较,必须配合 [ ] 或 [[ ]] (条件判断语法)使⽤,不能单独⽤。

注意:不能⽤ > < 做数字⽐较(Shell 中 > < 是重定向 / 字符串⽐较符号),⽐如 [ 5 > 3 ] 会被解析为 “把 5 写⼊⽂件 3”,⽽⾮数字⽐较!
3.逻辑运算符(条件组合)
⽤于组合多个判断条件(⽐如 “进程数> 0 且 ⽂件存在”),分两种语法( [ ] ⽤ -a/-o , [[ ]] ⽤ &&/|| )。

4.⽂件测试运算符(最常⽤!)
Linux “⼀切皆⽂件”,该运算符⽤于判断⽂件 / ⽬录的状态(⽐如权限、是否存在),是你之前 改 scan.sh 权限的核⼼场景。

5.字符串运算符(字符串校验)
⽤于判断字符串是否为空、是否相等,⽐如校验⽤户输⼊的 Shell 路径是否合法。

字符索引(所有操作的基础,索引从 0 开始):

比如截取: ${str:起始索引:⻓度}
语法: ${变量名:起始索引:截取⻓度} ,⻓度省略则截取到末尾。

- 条件语句
if语句

核⼼注意: [ ] / [[ ]] 前后、条件运算符两侧必须加空格(⽐如 if [ $a -gt 0 ] 不能写成 if[$a-gt0] )。
- case(多分⽀模式匹配)
case 语句(菜单)是多分⽀模式匹配⼯具,专⻔⽤于 “⼀个变量匹配多个固定值 / 模式” 的场 景 —— 相⽐多分⽀ if-elif-else , case 语法更简洁、可读性更⾼,尤其适合 “菜单选 择、参数解析、固定状态判断”(⽐如根据⽤户输⼊执⾏ “删⽤户 / 修权限 / 查进程”)。

关键规则:
1.模式⽀持通配符: * (匹配任意字符)、 ? (匹配单个字符)、 [a-z] (匹配范围);
2. 匹配顺序:从上到下,命中第⼀个模式后执⾏对应命令,遇到 ;; ⽴即退出(所以精准模式 放前⾯,模糊 / 默认放最后);
3. 变量⽆需引号:但变量含空格 / 特殊字符时,建议⽤ “$变量” 包裹。
- 循环语句
for循环
for遍历型循环,核⼼是 “把列表⾥的每⼀项赋值给变量,然后执⾏命令”,适合批量处理 (⽐如批量检查多个⽤户、多个⽂件)。


- while(条件循环):“只要条件成⽴,就⼀直循环”
while 是条件型循环,核⼼是 “先判断条件,成⽴就执⾏循环体,直到条件不成⽴退出”,适 合 “持续检查状态”(⽐如等进程终⽌、逐⾏读⽂件)。


注意:在 for / while 中,可⽤这两个命令控制循环:
break :直接退出整个循环(⽐如示例中 “进程终⽌就退出循环”);
continue :跳过当前次循环,继续下⼀次(⽐如遍历⽤户时,跳过不存在的⽤户)

1.if 看 “条件”, for 看 “列表”, while 看 “持续条件”;
2. 所有流程语句都要 “闭合”( if→fi 、 for→done 、 while→done );
3. 条件判断的空格、变量引号(⽐如 “$user” )是避坑关键。