如何在Bash

时间:2017-10-19 06:39:08

标签: bash shell

好的,初学者:
我如何实现以下目标:

  • 我需要检查文件的大小
  • 然后使用if条件和相应的条件语句
  • 将此文件大小与固定数字进行比较

到目前为止,我有以下内容:

#!/bin/bash

# File to consider
FILENAME=./testfile.txt

# MAXSIZE is 5 MB
MAXSIZE = 500000

# Get file size
FILESIZE=$(stat -c%s "$FILENAME")
# Checkpoint
echo "Size of $FILENAME = $FILESIZE bytes."

# The following doesn't work
if [ (( $FILESIZE > MAXSIZE)) ]; then
    echo "nope"
else
    echo "fine"
fi

使用此代码,我可以在变量$ FILESIZE中获取文件名,但我无法将其与固定的整数值进行比较。

修改

#!/bin/bash
filename=./testfile.txt
maxsize=5
filesize=$(stat -c%s "$filename")
echo "Size of $filename = $filesize bytes."

if (( filesize > maxsize )); then
    echo "nope"
else
    echo "fine"
fi

1 个答案:

答案 0 :(得分:11)

一些句法问题。

  1. bash中的变量定义不占用应该为MAXSIZE=500000的空格,不含空格
  2. 比较操作的方式不正确。而不是if [ (( $FILESIZE > MAXSIZE)) ];。您可以单独使用bash自己的算术运算符,并跳过[运算符仅if (( FILESIZE > MAXSIZE)); then
  3. 如果您担心脚本中存在语法问题,请使用shellcheck语法检查脚本并修复从中看到的错误。

    作为bash中的一般编码实践小写用户定义变量,以避免将它们与由shell解释为不同目的的特殊环境变量混淆(例如{{1} },$HOME