Shell 基础命令与变量操作详解
确认当前 Shell 环境
排查问题时,首先得知道当前用的是哪个 Shell。可以通过以下几种方式快速确认:
echo $SHELL
env | grep SHELL
ps -p $$
查看系统允许登录的 Shell 列表也很实用:
cat /etc/shells
文件查找与符号链接
在目录及其子目录中查找特定字符串时,grep 配合 -R 参数非常高效。如果需要忽略大小写,加上 -i 即可。
grep -R -i "a" /dir
查找指定扩展名的文件同样简单:
find /dir -name '*.c'
若要查看某个目录下所有的符号链接,可以结合 ls 和 grep 过滤:
ls -Rl | grep '\-> asm'
更复杂的场景下,比如需要显示绝对路径下的链接信息,可以使用 sed 处理输出:
ls -Rl | sed 's:[^ ]\{1,\}$:`pwd`/&:' | grep '\->'
变量参数扩展技巧
Bash 中的 ${} 语法功能强大,不仅能获取变量值,还能进行字符串截取、替换和条件赋值。理解这些规则能极大提升脚本的健壮性。
假设定义了如下变量:
file=/dir1/dir2/dir3/my.file.txt
字符串截取与删除
利用 # 和 % 分别匹配左侧和右侧,单号表示最小匹配(贪婪度低),双号表示最大匹配(贪婪度高)。
${file#*/}:删除第一个/及其左侧内容,结果为dir1/dir2/dir3/my.file.txt${file##*/}:删除最后一个/及其左侧内容,结果为my.file.txt${file%.*}:删除最后一个.及其右侧内容,结果为/dir1/dir2/dir3/my.file${file%%.*}:删除第一个.及其右侧内容,结果为/dir1/dir2/dir3/my
提取子串则使用冒号语法:
${file:0:5} # 提取最左边 5 个字符:/dir1

