Shell脚本中stat命令执行结果无法赋值给变量file_size问题求助
Shell脚本执行异常原因分析
核心错误原因
- 变量赋值语法不符合Shell规范:Shell中对变量赋值时,
=运算符两侧不允许存在空格。代码第6行的file_size= $(stat -c %s ./dropcache.log)在等号后多了一个空格,Shell会将这行解析为:临时设置环境变量file_size为空值,然后执行$(stat -c %s ./dropcache.log)返回的结果作为独立命令,就出现了对应异常。 - 修复方式:直接删除等号后的空格即可,修改为:
file_size=$(stat -c %s ./dropcache.log)
其他可优化的语法问题
- 脚本开头的shebang标识不完整,
#!后需要指定对应的Shell解释器路径,建议修改为#!/bin/bash或者#!/bin/sh,否则系统可能无法正确识别脚本的执行环境。 if [ $file_size -gt $MAXFILESIZE ]这类整数比较语句,建议给变量加上双引号避免变量为空时的语法报错,修改为if [ "$file_size" -gt "$MAXFILESIZE" ]。- 语句
sudo echo "1" > /proc/sys/vm/drop_caches存在权限问题:重定向操作是由当前Shell执行的,并不会继承sudo的root权限,会提示权限不足。建议修改为echo "1" | sudo tee /proc/sys/vm/drop_caches。
内容的提问来源于stack exchange,提问作者Hater Blocker
相关产品推荐
相关产品推荐

