如何正确设置此变量?
How do I properly set this variable?
我想从文件中读取纪元时间戳,然后将其与当前纪元时间进行比较。
比较无效,出现错误:
./script.sh: line 13: 1559122886- : syntax error: operand expected (error token is "- ")
#!/bin/bash
RSTL=restart.log
if [ -f $RSTL ]; then
while IFS='|' read -r NRST LRST
do
echo "NRST is: $NRST"
echo "LRST is: $LRST"
done <$RSTL
CTIME=$(date +"%s")
echo "CTIME is: $CTIME"
fi
#LRST=$(date +"%s")
DIFF=$(( $CTIME-$LRST ))
echo "DIFF is: $DIFF"
if [[ $DIFF -gt 86400 ]]; then
echo "1|GREATER"
echo "1|$CTIME" > $RSTL
elif [[ $LRST -lt 86400 ]]; then
echo "LESS THAN"
echo "2|$CTIME" > $RSTL
else
echo "1|NEW"
echo "0|$CTIME" > $RSTL
fi
exit
在第 12 行中删除“#”,在第 13 行中从 $CTIME 和 $LRST 中删除“$”。
#!/bin/bash
RSTL=restart.log
if [ -f $RSTL ]; then
while IFS='|' read -r NRST LRST
do
echo "NRST is: $NRST"
echo "LRST is: $LRST"
done <$RSTL
CTIME=$(date +"%s")
echo "CTIME is: $CTIME"
fi
LRST=$(date +"%s")
DIFF=$(( CTIME-LRST )) # Remove $ from $CTIME and $LRST
echo "DIFF is: $DIFF"
if [[ $DIFF -gt 86400 ]]; then
echo "1|GREATER"
echo "1|$CTIME" > $RSTL
elif [[ $LRST -lt 86400 ]]; then
echo "LESS THAN"
echo "2|$CTIME" > $RSTL
else
echo "1|NEW"
echo "0|$CTIME" > $RSTL
fi
exit
当您在 $((..))
中以变量扩展形式(如 $var
)提及未声明的变量时,它会扩展为空字符串而不是零,因此会出现错误。除非必须,否则不要在算术扩展中使用变量扩展。将第 13 行更改为以下即可。
DIFF=$((CTIME-LRST))
脚本的另一个问题是,您在 while 循环中填充 NRST
和 LRST
,这样在循环外就无法访问它们。要修复它,请将 while 循环替换为:
IFS='|' read -r NRST LRST <"$RSTL"
echo "NRST is: $NRST"
echo "LRST is: $LRST"
并且不要忘记引用所有变量扩展以避免分词。
我想从文件中读取纪元时间戳,然后将其与当前纪元时间进行比较。
比较无效,出现错误:
./script.sh: line 13: 1559122886- : syntax error: operand expected (error token is "- ")
#!/bin/bash
RSTL=restart.log
if [ -f $RSTL ]; then
while IFS='|' read -r NRST LRST
do
echo "NRST is: $NRST"
echo "LRST is: $LRST"
done <$RSTL
CTIME=$(date +"%s")
echo "CTIME is: $CTIME"
fi
#LRST=$(date +"%s")
DIFF=$(( $CTIME-$LRST ))
echo "DIFF is: $DIFF"
if [[ $DIFF -gt 86400 ]]; then
echo "1|GREATER"
echo "1|$CTIME" > $RSTL
elif [[ $LRST -lt 86400 ]]; then
echo "LESS THAN"
echo "2|$CTIME" > $RSTL
else
echo "1|NEW"
echo "0|$CTIME" > $RSTL
fi
exit
在第 12 行中删除“#”,在第 13 行中从 $CTIME 和 $LRST 中删除“$”。
#!/bin/bash
RSTL=restart.log
if [ -f $RSTL ]; then
while IFS='|' read -r NRST LRST
do
echo "NRST is: $NRST"
echo "LRST is: $LRST"
done <$RSTL
CTIME=$(date +"%s")
echo "CTIME is: $CTIME"
fi
LRST=$(date +"%s")
DIFF=$(( CTIME-LRST )) # Remove $ from $CTIME and $LRST
echo "DIFF is: $DIFF"
if [[ $DIFF -gt 86400 ]]; then
echo "1|GREATER"
echo "1|$CTIME" > $RSTL
elif [[ $LRST -lt 86400 ]]; then
echo "LESS THAN"
echo "2|$CTIME" > $RSTL
else
echo "1|NEW"
echo "0|$CTIME" > $RSTL
fi
exit
当您在 $((..))
中以变量扩展形式(如 $var
)提及未声明的变量时,它会扩展为空字符串而不是零,因此会出现错误。除非必须,否则不要在算术扩展中使用变量扩展。将第 13 行更改为以下即可。
DIFF=$((CTIME-LRST))
脚本的另一个问题是,您在 while 循环中填充 NRST
和 LRST
,这样在循环外就无法访问它们。要修复它,请将 while 循环替换为:
IFS='|' read -r NRST LRST <"$RSTL"
echo "NRST is: $NRST"
echo "LRST is: $LRST"
并且不要忘记引用所有变量扩展以避免分词。