Bash -eq 不起作用,可能是因为 cal

标签 bash if-statement

#!/bin/bash

i=0
d="$(date +%d)"
#wrong one:
#an="$(cal | awk '/[0-9]/ {print $2}' | tail -2)"
# fixed one:
an="$(cal | col -b | sed 's/_//g' | awk '/[0-9]/ {print $2}' | tail -2)"
for e in $an
do
  if [ "$d" -eq "$e" ]; then
    i=1
  fi
done

echo i=$i

问题出在 $an/$e 但我不明白为什么以及如何解决它。我看过,它没有任何空格,它们是数字,但 bash 不这么认为。

<<编辑>>

好吧,我同意,也许我选择了错误的方法,只是认为使用 cal 会很简单。 它是更大脚本的一部分,因此我需要从中获取结果,以便脚本可以进一步继续执行代码。 我需要获取 2 个上周一、周二、...或周日,并将其与今天进行比较,如果状态相同,请将此信息提供给脚本。

最佳答案

cal 使用重划线来下划线今天 cal |更少 如果你不这样做 手头有一台 ASCII 打印机。

您需要先过滤掉它。

col 是一个工具

i=0
d="$(date +%d)"
an="$(cal | col -b | awk '/[0-9]/ {print $2}' | tail -2)"
for e in $an
do
  if [ "$d" -eq "$e" ]; then
    i=1
  fi
done

替代方案是今天是一个月中最后两个星期一之一。

 # must be GNU date
 (( `date -d '2 weeks' +' i = %d < 14 && %w == 1 '` ))

该表达式将 i 设置为 1 或 0 并返回 true 或 false 如果您想要“周日 bug”,请使用 13 天 %w == 0 而不是 2 周 %w == 1

关于Bash -eq 不起作用,可能是因为 cal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686389/

相关文章:

linux - 使用 lftp 比较远程目录而不执行传输

c++ - 如何比较 char 变量(c 字符串)?

python - "In"检查在 if 语句中不起作用

JavaScript:if 语句正在改变随机生成器的结果?

regex - expr 字符串匹配-混合数字和字符?

bash - 使用getopts处理长和短命令行选项

regex - 如何在 shell 脚本中使用正则表达式?

if-statement - 退出带有空 return 语句的函数是好还是坏的做法?

Python 是否

bash - 如何在两列中分别打印两个函数的输出 - Bash 脚本