首页 > 系统相关 >linux shell变量和数据类型

linux shell变量和数据类型

时间:2023-08-15 21:44:58浏览次数:32  
标签:shell 变量 使用 数据类型 echo COLORS 数组 linux NAME

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

相关文章

  • JavaSE--基本数据类型的包装类
    一、八种包装类1、为什么需要基本数据类型的包装类  有以下需求:方法参数为Objectobj,但是有需要传进去一个数字或者字符,publicclassIntegerTest01{publicstaticvoidmain(String[]args){//有没有这种需求:调用doSome()方法的时候需要传一个数字进去......
  • Linux安装Solr-8.9.0
    Solr的工作原理可以简单地概括为以下几个步骤:1.索引创建:首先,Solr需要创建一个索引,用于存储要搜索的数据。索引是基于ApacheLucene构建的,它将文档拆分为字段,并对字段进行分析和标记化,以便进行更有效的搜索和匹配。2.数据导入:Solr可以从多种数据源导入数据,包括数据库、文件、Web......
  • Shell 实现终端 rm 回收站效果
    本次实现的rm脚本的功能有:回收站收容删除的文件脚本记录删除的文件绝对路径和时间戳可根据脚本恢复删除的文件,并且可以只根据文件名匹配回收站所有的文件进行选择可直接删除文件可同时接收多个参数清空回收站后续会更新定时清空回收站的功能。TRASH_DIR="$HOME/.trash......
  • Linux系统DD一键脚本
    使用脚本存在一定的风险,谨慎使用。重统重装之后,请重新设置密码。脚本介绍GitHub地址:GitHub-leitbogioro/Tools全自动无人值守安装;支持各主流VPS商家;系统支持情况:Debian12、KaliRolling、AlpineLinuxEdge、CentOS9stream、AlmaLinux9、RockyLinux9、Fedora3......
  • archlinux简单安装笔记(未完)
    装了很多回archlinux,跟了很多遍各种教程和官方wiki,也来自己写一个简单的笔记吧。安装之前的准备略去不写,就从archlinux的iso启动之后开始吧。其实archlinux也只是安装过程看上去高级一点,滚动更新的理念和大部分所谓主流发行版有点区别,用惯了TUI操作的人对于无GUI操......
  • 在Linux宿主机上直接读写虚拟机磁盘文件
    主要是使用guestmount命令来挂载KVM磁盘镜像并从中提取文件,以下是具体操作步骤:1、宿主机安装libguestfs工具集:sudoapt-getinstalllibguestfs-toolssudoyuminstalllibguestfs-tools2、使用guestmount命令挂载KVM磁盘镜像:sudoguestmount-a/path/to/kvm-imag......
  • Linux——杀死进程
    PS命令-a:显示所有进程,包括其他用户的进程。-u:显示指定用户的进程信息。-x:显示没有控制终端的进程。-e:显示所有进程,等效于-A。-f:显示进程的详细信息,包括进程名称、进程状态、PID、PPID、CPU占用率等。--pid:指定显示某个进程的信息。#查看进程ps-aux|grepja......
  • Linux——shell变量及运算
    #注意等号两边不能有空格,命令才会有空格,像是dockerps,如果加空格,linux以为你写的是某种命令。#数字num=1#字符串str0=teststr1='test'str2="test"#字符串的三种声明方式是有区别的:#1.单引号中的内容回原样输出,不会转义,不会取值。#2.双引号中的内容输出,会转......
  • Linux——文件授权
    文件授权chmod-R777[path]chmod-R755[path]一般用的到也就是777、755、644这三种权限。数字有3位,位数表示不同角色:第1位表示所有者,第2位表示同组用户,第3位表示公共用户,数字的具体含义:r代表读取权限等于4,w代表写入权限等于2,x代表执行权限......
  • Linux专栏(二):创建虚拟机与Ubuntu安装
    文章目录1下载Ubuntu20.04镜像2创建虚拟机3安装Ubuntu系统本文将介绍在VMware中如何创建虚拟机并安装Ubuntu20.04系统1下载Ubuntu20.04镜像下载地址:Ubuntu官网镜像下载2创建虚拟机Step1:打开上文Linux专栏(一)——VMware的下载与安装下载的VMware,点击创建虚拟机,后在弹窗中默认......