Shell 变量

1.Shell 变量简介

    在 Shell 编程中,变量是用于存储数据值的名称。定义变量时,变量名不加美元符号($,PHP语言中变量需要)

2.变量名的命名规则

(1)只包含字母、数字和下划线:变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。

(2)不能以数字开头: 变量名不能以数字开头,但可以包含数字。

(3)避免使用 Shell 关键字:不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。

(4)使用大写字母表示常量:常量变量名通常使用大写字母,例如 PI=3.14。

(5)避免使用特殊符号:尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。

(6)避免使用空格:变量名中不应该包含空格,因为空格通常用于分隔命令和参数。

3.用语句给变量赋值

for file in `ls /etc`或for file in $(ls /etc)

4.使用变量

使用定义过的变量,只要在变量名前面加美元符号即可。

your_name="kalika"
echo $your_name
echo ${your_name}

变量名外面的花括号是可选的,加不加都行,添加花括号是为了帮助解释器识别变量的边界。

for skill in Ada Coffe Action Java; do
    echo "I am good at ${skill}Script"
done

若不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果会与预期不符,应该给所有变量加上花括号。

已定义的变量,可以被重新定义。第二次赋值的时候不能写$your_name="alibaba",使用变量的时候才加美元符($)。

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

5.只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

#!/bin/bash

myUrl="https://www.google.com"
readonly myUrl
myUrl="https://www.baidu.com"

6.删除变量

使用 unset 命令可以删除变量,变量被删除后不能再次使用,unset 命令不能删除只读变量。

#!/bin/sh

myUrl="https://www.baidu.com"
unset myUrl
echo $myUrl

7.变量类型

(1)字符串变量:在 Shell中,变量通常被视为字符串。可以使用单引号 ' 或双引号 " 来定义字符串,例如:

my_string='Hello, World!'
my_string="Hello, World!"

(2)整数变量:在一些Shell中,可以使用 declare 或 typeset 命令来声明整数变量。这样的变量只包含整数值,例如:

declare -i my_integer=42

这样的声明告诉 Shell 将 my_integer 视为整数,如果尝试将非整数值赋给它,Shell会尝试将其转换为整数。

(3)数组变量: Shell支持数组,允许在一个变量中存储多个值。数组可以是整数索引数组或关联数组,简单整数索引数组例子:

my_array=(1 2 3 4 5)

或者关联数组:

declare -A associative_array
associative_array["name"]="John"
associative_array["age"]=30

(4)环境变量: 这些是由操作系统或用户设置的特殊变量,用于配置 Shell 的行为和影响其执行环境。例如,PATH 变量包含了操作系统搜索可执行文件的路径:

echo $PATH

(5)特殊变量: 有一些特殊变量在 Shell 中具有特殊含义,例如 $0 表示脚本的名称,$1, $2, 等表示脚本的参数。$#表示传递给脚本的参数数量,$? 表示上一个命令的退出状态等。

8.Shell 字符串

字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。

(1)单引号字符串的限制:单引号里的任何字符都会原样输出,单引号字符串变量是无效的;单引号字符串不能出现单独的单引号(使用转义符后也不行),但可成对出现,作为字符串拼接使用。

str='this is a string'

(2)双引号的优点:双引号里可以有变量,可以出现转义字符。

your_name="kalika"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

(3)拼接字符串

your_name="kalika"

# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting  $greeting_1

# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2  $greeting_3

(4)获取字符串长度:

string="abcd"
echo ${#string}   # 输出 4

变量为字符串时,${#string} 等价于 ${#string[0]}

string="abcd"
echo ${#string[0]}   # 输出 4

(5)提取子字符串

第一个字符索引值为 0,从字符串第 2 个字符开始截取 4 个字符。

string="kalika is a great site"
echo ${string:1:4} # 输出 unoo

(6)查找子字符串

查找字符 i 或 o 的位置(哪个字母先出现就计算哪个)

string="kalika is a great site"
echo `expr index "$string" io`  # 输出 4

9.Shell 数组

bash支持一维数组(不支持多维数组),没有限定数组的大小。类似于 C 语言,数组元素的下标由 0 开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。

(1)定义数组

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。可以不使用连续的下标,而且下标的范围没有限制。

数组名=(值1 值2 ... 值n)

array_name=(value0 value1 value2 value3)

(2)读取数组

使用 @ 符号可以获取数组中的所有元素。

${数组名[下标]}

valuen=${array_name[n]}
echo ${array_name[@]}

(3)获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同。

# 取得数组元素的个数
length=${#array_name[@]}

# 或者
length=${#array_name[*]}

# 取得数组单个元素的长度
length=${#array_name[n]}

10.Shell 注释

以 # 开头的行就是注释,会被解释器忽略。通过每一行加一个 # 号设置多行注释。如果在开发过程中,遇到大段的代码需要临时注释起来,每行加#符号太费力,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。

11.多行注释

(1)使用 Here 文档

: 是一个空命令,用于执行后面的 Here 文档,<<'EOF' 表示开启 Here 文档,COMMENT 是 Here 文档的标识符,在这两个标识符之间的内容都会被视为注释,不会被执行。

:<<EOF

注释内容...

注释内容...

注释内容...

EOF

(2)直接使用 : 号

可以使用冒号 : 命令,用单引号 ' 将多行内容括起来。由于冒号是一个空命令,这些内容不会被执行。格式为:: + 空格 + 单引号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值