【问题标题】:HP - UX - Size calcucation using bash scriptHP - UX - 使用 bash 脚本计算大小
【发布时间】:2021-01-13 16:16:37
【问题描述】:

我正在尝试在 HP-UX 上以人类可读的形式显示大小。我们有一些用于 sftp 传输的遗留系统。这些服务器连接T1专线,传输速度很慢。我必须偶尔检查大小以验证传输是否完成。 由于 HP-UX 无法以 kb 或 GB 显示大小,我们必须手动划分输出以验证。 我只是想构建一个小脚本来显示以 GB 为单位的大小。

read -p "Enter File Path/Location " location
output=$(ls -l $location | cut -d ' ' -f 18)
#output=$(ls -l /central/home/sftp/file.daily | cut -d ' ' -f 18)
echo "Size in GB is:  ${output}"
#echo "Size in GB is:  ${output} / (1024*1024*1024)"  not working "

bash-4.4$ ./script
Enter File Path/Location /central/home/sftp/file.daily
Size in GB is:  153844074
bash-4.4$ 

伙计们/女孩们,我不是专业人士,我只是在学习一些东西以增强我在 bash 脚本方面的知识。

【问题讨论】:

    标签: bash hp-ux


    【解决方案1】:

    您的命令echo "Size in GB is: ${output} / (1024*1024*1024)" 不起作用,因为表达式只是一个字符串。要在 bash 中进行计算,请使用算术上下文 $(( ... ))。但是,bash 无法处理浮点数,因此我会求助于bc

    另外,ls | cut -f 18 似乎有点奇怪。这将检索第 18 个字段。我的ls -l 的输出只有 9 个字段,文件大小是第 5 个字段。
    你可以解析du,而不是解析ls,这样更简单,更不容易出错。 du -k 以 kB(= 1024 字节)为单位打印大小。

    #! /usr/bin/env bash
    size_kB=$(du -k "$1" | cut -f 1)
    size_GB=$(echo "scale=1; $size_kB / 1024 / 1024;" | bc)
    echo "File $1 has size $size_GB GB"
    

    将此脚本存储在可执行文件中,然后将其用作

    bash$ path/to/myscript.sh someFile
    File someFile has size 12.3 GB
    

    将文件名作为参数传递允许您使用制表符完成。 read 不可能做到这一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 2016-12-04
      相关资源
      最近更新 更多