Shell 编程基础:变量和数据类型

原文链接
在上一篇文章中,我们介绍了 Shell 编程的基本概念和简单的 Hello World 示例。本文将深入探讨 Shell 编程中的变量和数据类型,这是构建复杂脚本的基础。

Shell编程入门:掌握基础,开启命令行编程之旅

变量

在 Shell 脚本中,变量是存储数据的容器。它们可以存储各种类型的数据,如数字、字符串或数组。

变量声明和赋值

在 Bash 中,变量的声明和赋值非常简单:

name="John Doe"
age=30

注意:等号两边不能有空格,否则会导致错误。

使用变量

要使用变量的值,只需在变量名前加上 $ 符号:

echo "My name is $name and I am $age years old."

也可以使用 ${variable} 的形式,这在某些情况下更清晰:

echo "My name is ${name} and I am ${age} years old."

只读变量

可以使用 readonly 命令将变量设置为只读:

readonly PI=3.14159
PI=3.14  # 这将产生错误

删除变量

使用 unset 命令可以删除变量:

unset name
echo $name  # 不会输出任何内容

注意:不能删除只读变量。

数据类型

虽然 Bash 不像其他编程语言那样有严格的数据类型,但它确实支持一些基本的数据类型。

字符串

字符串是 Shell 中最常用的数据类型。可以用单引号或双引号来定义字符串:

str1='This is a string'
str2="This is also a string"

单引号和双引号的区别:

  • 单引号中的内容会原样输出,不会解析变量。
  • 双引号中的内容会解析变量。

例如:

name="John"
echo 'Hello, $name'  # 输出:Hello, $name
echo "Hello, $name"  # 输出:Hello, John
字符串操作
  1. 字符串拼接:
str1="Hello"
str2="World"
str3="$str1 $str2"
echo $str3  # 输出:Hello World
  1. 获取字符串长度:
str="Hello, World!"
echo ${#str}  # 输出:13
  1. 提取子字符串:
str="Hello, World!"
echo ${str:7:5}  # 输出:World

数字

Bash 支持整数和浮点数:

int=42
float=3.14
数学运算

Bash 提供了多种进行数学运算的方法:

  1. 使用 expr
result=`expr 5 + 3`
echo $result  # 输出:8
  1. 使用双括号:
result=$((5 + 3))
echo $result  # 输出:8
  1. 使用 let
let result=5+3
echo $result  # 输出:8

数组

Bash 支持一维数组:

fruits=("Apple" "Banana" "Cherry")

访问数组元素:

echo ${fruits[0]}  # 输出:Apple
echo ${fruits[@]}  # 输出:Apple Banana Cherry

获取数组长度:

echo ${#fruits[@]}  # 输出:3

添加元素到数组:

fruits+=("Date")
echo ${fruits[@]}  # 输出:Apple Banana Cherry Date

环境变量

环境变量是在系统级别定义的变量,可以被所有程序访问。一些常用的环境变量包括:

  • $HOME:当前用户的主目录
  • $PATH:可执行文件的搜索路径
  • $USER:当前用户的用户名

查看所有环境变量:

env

设置新的环境变量:

export MY_VAR="Hello, Environment!"
echo $MY_VAR

特殊变量

Bash 提供了一些特殊变量,用于获取脚本的相关信息:

  • $0:脚本名称
  • $1, $2, …: 脚本的参数
  • $#:参数的数量
  • $@:所有参数的列表
  • $?:上一个命令的退出状态
  • $$:当前脚本的进程 ID

例子:

#!/bin/bash

echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"
echo "Number of arguments: $#"
echo "All arguments: $@"
echo "Process ID: $$"

# 执行一个命令
ls /nonexistent
echo "Exit status of last command: $?"

变量作用域

默认情况下,Bash 中的变量是全局的。但是,可以使用 local 关键字创建局部变量:

function test_scope {
    local local_var="I'm local"
    echo "Inside function: $local_var"
}

test_scope
echo "Outside function: $local_var"  # 不会输出任何内容

小技巧

  1. 使用 ${variable:-default} 提供默认值:
echo "Hello, ${name:-World}"  # 如果 name 未定义,将输出 "Hello, World"
  1. 使用 ${variable:=default} 设置默认值:
echo "Hello, ${name:=World}"  # 如果 name 未定义,将设置 name 为 "World" 并输出
  1. 使用 ${!prefix*}${!prefix@} 展开所有以特定前缀开头的变量:
fruit_1="Apple"
fruit_2="Banana"
fruit_3="Cherry"
echo ${!fruit_*}  # 输出:fruit_1 fruit_2 fruit_3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值