变量(Shell基础教程2)
教程
Shell 变量在赋值时即被创建。变量可以包含数字、字符或字符串。变量名区分大小写,通常由字母、数字和下划线(_)组成。
赋值通过 = 符号完成。注意:初始化变量时,= 两侧不能有空格。
PRICE_PER_APPLE=5
MyFirstLetters=ABC
greeting='Hello world!'引用变量
反斜杠 \ 用于转义特殊字符的含义。
PRICE_PER_APPLE=5
echo "The price of an Apple today is: \$HK $PRICE_PER_APPLE"避免变量名歧义
使用 ${} 封装变量名可避免与后续字符产生歧义。
MyFirstLetters=ABC
echo "The first 10 letters in the alphabet are: ${MyFirstLetters}DEFGHIJ"保留空格
使用双引号 "" 封装变量名将保留值中的所有空格。
greeting='Hello world!'
echo "$greeting"
echo "$greeting now with spaces: $greeting"命令替换
可以使用命令的输出值来为变量赋值,这称为命令替换(Command Substitution)。可以通过反引号 ` 或 $() 包裹命令来完成替换。
FILELIST=`ls`
FileWithTimeStamp=/tmp/my-dir/file_$(/bin/date +%Y-%m-%d).txt请注意,脚本运行时,它将在 $() 括号内运行命令并捕获其输出。
练习
本练习的目标是使用命令替换来创建字符串、整数和复杂变量。
- 字符串变量命名为
BIRTHDATE,应包含文本"Jan 1, 2000"。 - 整数变量命名为
Presents,应包含数字10。 - 复杂变量命名为
BIRTHDAY,应包含与BIRTHDATE日期匹配的星期几(例如 Saturday)。
注意,date 命令可用于将日期格式转换为其他格式。例如,要将日期值 $date1 转换为星期几,请使用:
date -d "$date1" +%A教程代码
#!/bin/bash
# Change this code
BIRTHDATE=
Presents=
BIRTHDAY=
# Testing code - do not change it
if [ "$BIRTHDATE" == "Jan 1, 2000" ] ; then
echo "BIRTHDATE is correct, it is $BIRTHDATE"
else
echo "BIRTHDATE is incorrect - please retry"
fi
if [ $Presents == 10 ] ; then
echo "I have received $Presents presents"
else
echo "Presents is incorrect - please retry"
fi
if [ "$BIRTHDAY" == "Saturday" ] ; then
echo "I was born on a $BIRTHDAY"
else
echo "BIRTHDAY is incorrect - please retry"
fi预期输出
BIRTHDATE is correct, it is Jan 1, 2000
I have received 10 presents
I was born on a Saturday解决方案
#!/bin/bash
# Change this code
BIRTHDATE="Jan 1, 2000"
Presents=10
BIRTHDAY=`date -d "$BIRTHDATE" +%A`
# Testing code - do not change it
if [ "$BIRTHDATE" == "Jan 1, 2000" ] ; then
echo "BIRTHDATE is correct, it is $BIRTHDATE"
else
echo "BIRTHDATE is incorrect - please retry"
fi
if [ $Presents == 10 ] ; then
echo "I have received $Presents presents"
else
echo "Presents is incorrect - please retry"
fi
if [ "$BIRTHDAY" == "Saturday" ] ; then
echo "I was born on a $BIRTHDAY"
else
echo "BIRTHDAY is incorrect - please retry"
fi系列教程导航
- Hello, World!(Shell 基础教程 1)
- 变量 (Shell 基础教程 2)
- 将参数传递给脚本 (Shell 基础教程 3)
- 数组 (Shell 基础教程 4)
- 数组比较 (Shell 基础教程 5)
- 基本运算符 (Shell 基础教程 6)
- 基本字符串操作 (Shell 基础教程 7)
- 逻辑表达式 (Shell 基础教程 8)
- 循环 (Shell 基础教程 9)
- shell 函数 (Shell 基础教程 10)
- 特殊变量 (Shell 基础教程 11)
- 字符串操作 (Shell 基础教程 12)
- 捕捉信号命令 (Shell 基础教程 13)
- 文件测试 (Shell 基础教程 14)
- 输入参数解析 (Shell 基础教程 15)
- 管道 (Shell 基础教程 16)
- 输入输出 (Shell 基础教程 17)
- 常用表达 (Shell 基础教程 18)
- 特殊命令 sed(Shell 基础教程 19)
说明
- 命令替换风格:文中展示了反引号
`和$()两种写法。在现代 Shell 脚本编写中,推荐优先使用$()语法,因其嵌套可读性更好。 - 命令兼容性:练习中使用的
date -d参数属于 GNUdate命令(常见于 Linux 系统)。macOS 默认的 BSDdate命令不支持-d参数,若在 macOS 环境下运行可能需要调整日期处理命令。
版权声明:本文为原创文章,版权归 戴老师的博客 所有,转载请联系博主获得授权。
本文地址:https://1diff.fun/archives/bian-liang-shell-ji-chu-jiao-cheng-2.html
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。