请求解析Bash脚本功能及制作文件信息表格方法
脚本解析与表格制作指南
教授提供的脚本功能解析
先看原脚本代码:
#!/bin/sh cd /tmp var=`/bin/ls` for a in $var do if [ -f $a ] then /bin/ls -l $a else /bin/ls -ld $a fi done
逐行拆解功能:
#!/bin/sh:告诉系统用POSIX shell执行这个脚本,是脚本的必备起始声明。cd /tmp:自动切换到系统临时目录/tmp,后续所有操作都在该目录下进行。var=/bin/ls``:运行/bin/ls命令(列出当前目录下的所有文件和目录名),把输出结果存入变量var。for a in $var:将var里的每个文件名/目录名逐个取出,每次循环赋值给a。if [ -f $a ]:检查当前的a是否为普通文件(-f是shell的文件测试工具,专门判断是否为普通文件)。- 如果是普通文件,执行
/bin/ls -l $a:以长格式显示该文件的详细信息,比如权限、所有者、大小、修改时间等。 - 如果不是普通文件(多为目录,也可能是链接、设备文件等),执行
/bin/ls -ld $a:以长格式显示该目录(或其他非文件类型)本身的信息,而非目录内的内容。
制作包含文件名、行数、是否为目录的表格
下面是直接可用的bash脚本,执行后会生成符合要求的表格:
实现脚本
#!/bin/bash # 打印表格表头,左对齐并设置列宽 printf "%-20s %-8s %-15s\n" "文件名" "行数" "是否为目录" # 打印分隔线,对齐表头 printf "%-20s %-8s %-15s\n" "-------------------" "--------" "---------------" # 遍历当前目录下的所有可见文件和隐藏文件 for item in * .*; do # 跳过当前目录(.)和上级目录(..)这两个特殊项 if [ "$item" = "." ] || [ "$item" = ".." ]; then continue fi # 判断当前项是否为目录 if [ -d "$item" ]; then is_dir="是" line_count="N/A" # 目录没有行数,用N/A标记 else is_dir="否" # 统计文件行数,用重定向避免wc输出文件名,只取数字 line_count=$(wc -l < "$item") fi # 按格式打印每行内容,确保列对齐 printf "%-20s %-8s %-15s\n" "$item" "$line_count" "$is_dir" done
关键部分说明
printf格式化输出:用%-20s这类写法实现左对齐,数字代表列宽,保证表格整齐。- 遍历所有文件:
*匹配可见文件,.*匹配隐藏文件,不会遗漏任何项。 - 目录判断:
-d是shell的测试运算符,专门检测是否为目录。 - 行数统计:
wc -l < "$item"只统计行数,不会输出文件名,空文件会返回0。
使用步骤
- 把上面的代码复制到文本编辑器,保存为
file_info_table.sh。 - 打开终端,给脚本添加执行权限:
chmod +x file_info_table.sh。 - 切换到你要生成表格的目录,执行脚本:
./file_info_table.sh。
内容的提问来源于stack exchange,提问作者user19967186
相关产品推荐
相关产品推荐

