date -d 命令可以把类似这样的日期时间转换成时间戳”Jan 28 16:47:16 2025″,它会计算自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数。
命令如下:
date -d "Jan 28 16:47:16 2025" +%s
请严格按照这种格式进行填写,双引号后面有一个空格不能省略。
如果想要把这个日期变成可替换的,可以把整个命令使用小括号括起来,前面加上$符号,例如:
NOT_AFTER="Jan 28 16:47:16 2025"
timestamp=$(date -d "$NOT_AFTER" +%s)
echo $timestamp
以上代码有几点需要注意:
- bash脚本不兴有多余的空格,变量声明(变量的创建)时,等号两边不允许有空格。
- 获取变量要在变量名的前面加$符号。
- 如果整个命令执行的值要赋值给另一个变量(不管是新的变量还是旧的变量),可以把整个命令使用小括号括起来,然后前面加一个$符号就行。
字符串转数字,使用$(( ))把内容括起来,里面的内容会被自动识别为数值计算或逻辑运算,注意是双括号,且都是小括号。例如:
NOT_AFTER="Jan 28 16:47:16 2025"
timestamp=$(date -d "$NOT_AFTER" +%s)
days_remaining=$(($timestamp/60/60/24))
echo $days_remaining
逻辑表达式
bash脚本的逻辑表达式中,字符串比较通常使用==
和 !=
,数值比较通常使用 -eq
(等于)和 -ne
(不等于),这是因为 Bash 从 Unix shell 继承了这些比较运算符,而 Unix shell 中并没有为整数比较提供 ==
和 !=
运算符。
以下是 Bash 中字符串和整数比较的区别:
-
字符串比较:
if [ "$string1" == "$string2" ]; then echo "字符串相等" fi if [ "$string1" != "$string2" ]; then echo "字符串不相等" fi
-
整数比较:
if [ "$int1" -eq "$int2" ]; then echo "整数相等" fi if [ "$int1" -ne "$int2" ]; then echo "整数不相等" fi
如果你尝试使用 ==
来比较整数,Bash 会将其视为字符串比较,这可能会导致意外的结果,特别是当整数变量包含前导零或不同的位数时。例如:
int1=08
int2=8
if [ "$int1" == "$int2" ]; then
echo "相等" # 这会输出“相等”,因为 Bash 将它们视为字符串比较,而 "08" 和 "8" 作为字符串是不相等的。
fi
if [ "$int1" -eq "$int2" ]; then
echo "相等" # 这不会输出任何内容,因为作为整数,08 和 8 是不相等的。
fi
因此,为了正确地比较整数,你应该使用 -eq
和 -ne
运算符。
逻辑表达式中整数比较不加引号也行
在 Bash 脚本中,是否在条件测试 [ ... ]
中对变量使用引号取决于具体情况。对于整数比较,通常可以不加引号,因为整数变量不包含空格或其他特殊字符,这些字符可能会导致条件测试被错误解析。然而,使用引号是一种更保守的做法,可以防止一些潜在的问题,特别是在变量值未知或可能为空的情况下。
以下是两种情况的比较:
使用引号:
if [ "$int1" -eq "$int2" ]; then
echo "整数相等"
fi
不使用引号:
if [ $int1 -eq $int2 ]; then
echo "整数相等"
fi
在第二种情况中,如果你的变量 $int1
或 $int2
为空,或者包含空格、特殊字符等,那么条件测试可能会出错。例如:
int1=""
int2=5
if [ $int1 -eq $int2 ]; then
echo "整数相等" # 这将导致条件测试语法错误,因为 -eq 两边不能有空的参数。
fi
为了避免这类问题,推荐在条件测试中总是使用引号,除非变量的内容是已知的,并且不包含任何可能导致解析错误的字符。使用引号是一种好的编程习惯,可以提高脚本的健壮性和可移植性。
if语句基础
基本if
语句命令判断如果特定条件为true
,则仅执行给定的一组操作。如果条件为false
,则不要执行这些操作。if
语句基本语法格式如下:
if [ expression ];
then
statements
fi
仅当表达式(在方括号之间)为真时,才会执行then
和fi
之间的语句。
注意:观察第一行中使用的空格,在第一行末尾使用分号。两者都必须使用,if
条件语句以fi
结尾。
- 使用
AND
运算符使用多个条件:if [ expression_1 ] && [ expression_2 ]; then statements fi
- 使用
OR
运算符使用多个条件:if [ expression_1 ] || [ expression_2 ]; then statements fi
- 对于具有
AND&OR
运算符的复合表达式,可以使用以下语法:if [ expression_1 && expression_2 || expression_3 ]; then statements fi
//更多请阅读:https://www.yiibai.com/bash/bash-if-statement.html
示例1
在此示例中,读取用户输入任意数字,并检查该值是否大于100
。
脚本文件:if-example1.sh
#!/bin/bash
read -p " Enter number : " number
if [ $number -gt 100 ]
then
echo "Value is greater than 100"
fi
示例2
在此示例中,通过比较两个字符串的值,简单演示了if
语句的用法。
脚本文件:if-example2.sh
#!/bin/bash
# if condition is true
if [ "yiibai" == "yiibai" ];
then
echo "true condition"
fi
# if condition is false
if [ "yiibai.com" == "xntutor.com" ];
then
echo "false condition"
fi
执行上面示例代码,得到以下结果:
示例3
在此示例中,演示如何使用if
语句比较数字。
脚本文件:if-example3.sh
#!/bin/bash
#if condition (greater than) is true
if [ 10 -gt 3 ];
then
echo "10 is greater than 3."
fi
#if condition (greater than) is false
if [ 3 -gt 10 ];
then
echo "3 is not greater than 10."
fi
#if condition (lesser than) is true
if [ 3 -lt 10 ];
then
echo "3 is less than 10."
fi
#if condition (lesser than) is false
if [ 10 -lt 3 ];
then
echo "10 is not less than 3."
fi
#if condition (equal to) is true
if [ 10 -eq 10 ];
then
echo "10 is equal to 10."
fi
#if condition (equal to) is false
if [ 10 -eq 9 ];
then
echo "10 is not equal to 9"
fi
执行上面示例代码,得到以下结果:
示例4
在此示例中,将演示如何在if
表达式中使用AND
运算符包括多个条件。
脚本文件:if-example4.sh
#!/bin/bash
# TRUE && TRUE
if [ 8 -gt 6 ] && [ 10 -eq 10 ];
then
echo "Conditions are true"
fi
# TRUE && FALSE
if [ "mylife" == "mylife" ] && [ 3 -gt 10 ];
then
echo "Conditions are false"
fi
执行上面示例代码,得到以下结果:
maxsu@ubuntu:~/bashcode$ vi if-example4.sh
maxsu@ubuntu:~/bashcode$ chmod +x if-example4.sh
maxsu@ubuntu:~/bashcode$ ./if-example4.sh
Conditions are true
maxsu@ubuntu:~/bashcode$
发表回复