linux shell变量和数据类型

变量是在编程中用于存储和操作数据的容器。在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

 

posted @ 2023-08-15 21:36  乐瓜乐虫  阅读(935)  评论(0)    收藏  举报