You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求解析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。

使用步骤

  1. 把上面的代码复制到文本编辑器,保存为file_info_table.sh。
  2. 打开终端,给脚本添加执行权限:chmod +x file_info_table.sh。
  3. 切换到你要生成表格的目录,执行脚本:./file_info_table.sh。

内容的提问来源于stack exchange,提问作者user19967186

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:35:30