变量是在编程中用于存储和操作数据的容器。在Shell脚本中,变量不需要事先声明数据类型,可以存储不同类型的值。以下是一些常见的变量和数据类型的示例:
1. **字符串变量**:
字符串是文本数据,在Shell脚本中用双引号或单引号括起来。
NAME="Alice" MESSAGE='Hello, World!'
2. **整数变量**:
整数用于存储整数值。
AGE=25 COUNT=10
3. **浮点数变量**:
Shell脚本中没有直接的浮点数类型,但可以通过工具实现。
PI=$(echo "scale=2; 22 / 7" | bc)
4. **数组变量**:
数组用于存储多个值的列表。
FRUITS=("Apple" "Banana" "Orange") echo "${FRUITS[0]}" # 输出第一个元素
5. **关联数组变量**:
关联数组用于存储键值对。
declare -A COLORS COLORS["Red"]="#FF0000" COLORS["Green"]="#00FF00"
6. **特殊变量**:
- `$0`:脚本名称
- `$1`、`$2`:命令行参数
- `$#`:参数个数
- `$?`:上一个命令的退出状态码
- `$$`:当前脚本的进程ID
示例:
echo "脚本名:$0" echo "第一个参数:$1" echo "参数个数:$#" echo "上一个命令退出状态码:$?" echo "当前进程ID:$$"
7. **特殊变量 - 输入输出重定向**:
- `$0`:标准输入(键盘输入)
- `$1`:标准输出(屏幕输出)
- `$2`:标准错误输出
示例:
echo "输出到屏幕" # 标准输出 echo "错误信息" >&2 # 标准错误输出 command > output.txt # 将命令输出重定向到文件 command >> output.txt # 追加命令输出到文件 command 2> error.txt # 将错误输出重定向到文件 command > output.txt 2>&1 # 同时将输出和错误输出都重定向到文件
8. **变量赋值**:
可以将命令的输出赋值给变量。
DATE=$(date +%Y-%m-%d)
9. **变量替换**:
使用 `$()` 或 `$(())` 进行变量替换。
RESULT=$(echo "$VAR1 + $VAR2" | bc)
10. **变量作用域**:
变量默认是全局作用域,但在函数内使用 `local` 关键字可使其在函数内部生效。
global_var="I'm global" my_function() { local local_var="I'm local" echo $global_var # 可以访问全局变量 echo $local_var # 只能在函数内访问局部变量 }
11. **变量引用**:
使用花括号 `{}` 来明确变量边界。
NAME="Alice" echo "${NAME}'s car" # 显示 Alice's car
12. **数据类型转换**:
使用工具如 `expr` 或 `bc` 来进行数据类型转换和计算。
LENGTH=10 WIDTH="5" AREA=$(expr $LENGTH \* $WIDTH)
13. **变量删除**:
使用 `unset` 命令删除变量。
unset VARIABLE_NAME
14. **使用命令行参数**:
使用 `$1`、`$2` 等引用命令行传入的参数。
echo "Hello, $1"
15. **特殊字符转义**:
使用反斜杠 `\` 进行特殊字符的转义。
echo "This is a \"quote\"."
16. **字符串拼接**:
使用拼接运算符 `.` 来拼接字符串。
FULL_NAME=$FIRST_NAME.$LAST_NAME
17. **字符串长度**:
使用 `${#VAR}` 来获取字符串长度。
LENGTH=${#STRING}
18. **字符串截取**:
使用 `${VAR:start:length}` 格式来截取字符串的一部分。
FULL_NAME="John Doe" FIRST_NAME=${FULL_NAME:0:4}
19. **数组操作**:
- 创建数组:使用 `()` 来创建数组。
FRUITS=("Apple" "Banana" "Orange")
- 获取数组元素:使用 `${ARRAY[index]}` 来获取数组元素。
echo ${FRUITS[0]} # 输出第一个元素
- 获取数组长度:使用 `${#ARRAY[@]}` 来获取数组长度。
LENGTH=${#FRUITS[@]}
- 遍历数组:使用 `for` 循环来遍历数组。
for fruit in "${FRUITS[@]}"; do echo "$fruit" done
20. **关联数组操作**:
- 创建关联数组:使用 `declare -A` 来创建关联数组。
declare -A COLORS COLORS["Red"]="#FF0000" COLORS["Green"]="#00FF00"
- 获取关联数组元素:使用 `${ARRAY[key]}` 来获取关联数组元素。
echo ${COLORS["Red"]} # 输出 Red 对应的值
- 获取关联数组所有键:使用 `${!ARRAY[@]}` 来获取所有键。
KEYS=("${!COLORS[@]}")
- 遍历关联数组:使用 `for` 循环来遍历关联数组。
for key in "${!COLORS[@]}"; do echo "$key: ${COLORS[$key]}" done
21. **条件判断和逻辑运算**:
使用 `if` 语句进行条件判断和逻辑运算。
if [ "$VAR" -eq 10 ]; then echo "VAR 等于 10" elif [ "$VAR" -lt 10 ]; then echo "VAR 小于 10" else echo "VAR 大于 10" fi
22. **循环和迭代**:
使用 `for` 和 `while` 循环进行迭代。
for i in {1..5}; do echo "Number: $i" done while [ "$count" -lt 5 ]; do echo "Count: $count" ((count++)) done
23. **函数定义和调用**:
定义函数并调用它们。
greet() { echo "Hello, $1" } greet "Alice"
24. **逻辑运算符**:
在条件判断中,可以使用逻辑运算符来组合多个条件。
- 逻辑与:`-a` 或 `&&`
- 逻辑或:`-o` 或 `||`
- 逻辑非:`!`
示例:
if [ "$age" -gt 18 -a "$gender" == "male" ]; then echo "成年男性" fi
25. **算术运算符**:
在数学运算中,可以使用算术运算符进行计算。
- 加法:`+`
- 减法:`-`
- 乘法:`*`
- 除法:`/`
- 取余:`%`
示例:
result=$((num1 + num2))
26. **字符串比较**:
在字符串比较中,可以使用 `=` 或 `==` 来比较字符串是否相等,使用 `!=` 来比较是否不等。
if [ "$str1" == "$str2" ]; then echo "字符串相等" fi
27. **数字比较**:
在数字比较中,可以使用 `-eq`(等于)、`-ne`(不等于)、`-lt`(小于)、`-le`(小于等于)、`-gt`(大于)、`-ge`(大于等于)等比较符号。
if [ "$num1" -gt "$num2" ]; then echo "num1 大于 num2" fi
28. **逻辑判断**:
使用条件判断来进行逻辑判断,如 `if`、`elif` 和 `else`。
if [ "$score" -ge 90 ]; then echo "优秀" elif [ "$score" -ge 80 ]; then echo "良好" else echo "一般" fi
29. **多行注释**:
使用 `: <<EOF` 和 `EOF` 来添加多行注释块。
: <<EOF 这是一个多行注释块 可以包含多行内容 EOF
30. **脚本退出**:
使用 `exit` 命令来退出脚本执行,可带上退出状态码。
if [ "$condition" == "true" ]; then exit 0 else exit 1 fi
31. **判断文件属性**:
使用 `-d` 判断是否为目录,`-f` 判断是否为普通文件,`-e` 判断文件是否存在等。
if [ -d "$dir" ]; then echo "是目录" elif [ -f "$file" ]; then echo "是文件" fi
标签:shell,变量,使用,数据类型,echo,COLORS,数组,linux,NAME From: https://www.cnblogs.com/yund/p/17623452.html