一、用户自定义变量

1、什么是变量

变量是计算机程序中的一种基本概念,用于保存和处理数据。在程序中,我们可以将变量看作一种“容器”或“盒子”,它们用来存储各种类型的值,并且可以随时修改和访问。在Shell中,变量是一个字符串或数字,它会被存储和处理。可以通过变量名来引用它们,并且可以在Shell脚本中使用。

2、变量规则

变量名必须以字母或下划线字符(_)开头,后面可以跟着任意的字母、数字或下划线。变量赋值时不需要声明变量类型,可以直接给变量赋值。例如:my_value="hello"。可以在一个变量中存储任何类型的数据,包括字符串、数字、数组等。如果变量的值有空格或其他特殊字符,则需要使用引号将其括起来,例如:my_value="hello world" 或 my_value="hello,world!"。可以使用$符号来获取变量的值,例如:echo $my_var。通过在变量名前加$符号,可以将变量的值引用到另一个命令或字符串中。

3、变量分类

用户定义的变量:用户定义的变量是由用户自己创建并设置的。例如,name="zhj"。环境变量:环境变量是全局的,可以在所有shell会话中使用。例如,PATH变量指定了应该搜索哪些目录以查找可执行文件。位置参数变量:位置参数变量提供了在脚本中传递参数的方法。例如,$0包含当前脚本的名称,$1包含第一个参数,$2包含第二个参数,以此类推。预定义变量:预定义变量是由Shell程序提前定义好的变量,它们的值是由Shell程序自动设置的。这些变量可以在Shell脚本中直接使用,无需在脚本中显式地定义和初始化。特殊变量:特殊变量在Shell中具有特殊用途,并且不能被修改。例如,$?包含上一个命令的退出状态,$$包含当前shell进程的PID。

4、用户自定义变量

在Shell脚本中,用户自定义变量是由用户在程序中手动定义和初始化的变量,其值可以在程序中进行修改。用户自定义变量的名称和含义是由用户自己定义的,没有固定的规则和限制。

用户自定义变量的定义

# 定义一个名为name的字符串变量,并初始化为"zhenghaojie"

name="zhenghaojie"

# 定义一个名为num的整数变量,并初始化为25

age=25

# 定义一个名为is_admin的布尔变量,并初始化为true

is_human=true

在定义和初始化变量后,可以在程序中调用变量的值

# 在命令行中输出变量的值

echo "name=$name, age=$age, is_human=$is_human"

修改已定义的变量的值

# 修改变量name的值为"jack"

name="jack"

# 修改变量num的值为200

num=200

# 修改变量is_admin的值为false

is_human=false

# 输出修改后的变量值

echo "name=$name, age=$age, is_human=$is_human"

使用set命令查看变量

# 查看所有存在"name"关键字的变量

set | grep name

使用unset命令来删除已定义的变量

# 删除变量name

unset name

# 删除变量age

unset age

# 删除变量is_human

unset is_human

注:在Shell脚本中,所有的变量都是字符串类型,无论你定义的变量名是否包含数字、下划线等特殊字符。不过,我们可以通过类型转换操作转换变量类型。

二、环境变量

1、什么是环境变量

在Linux中,环境变量是一些可以被操作系统或者应用程序使用的变量,它们存储在Shell进程中,可以为应用程序提供许多重要的配置信息和参数。环境变量会在当前shell以及这个shell的所有子shell中生效。

常见的Linux环境变量及其作用:

PATH:用于指定可执行文件所在路径的环境变量。HOME:指定当前用户的主目录路径。USER:指定当前用户名。SHELL:指定命令行shell解释器的路径。PS1:指定shell提示符的格式。LD_LIBRARY_PATH:指定动态链接库(shared lib)所在路径的环境变量。TZ:指定时区。TERM:指定终端类型。

关于PATH: PATH 是一个环境变量,用于指定 Linux 系统中可执行文件的搜索路径。当用户在命令行中输入一个命令时,Linux 会在 PATH 中定义的路径中查找同名的可执行文件,并在找到后执行它。如果 PATH 变量没有包含该命令所在的目录,则会提示“Command not found”。

关于PS1: PS1 命令用于设置 Linux Bash shell 环境下的提示符格式和内容。常见的默认提示符为 $ 或 #,但用户可以使用 PS1 命令自定义自己的提示符格式。如我的Linux系统中的该变量:

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

其中,\e 表示转义字符,\a 表示控制字符,${debian_chroot:+($debian_chroot)} 则表示条件语句。

这个命令中的具体含义如下:

\[\e]0;\u@\h: \w\a\]:设置终端窗口的标题,其中 \u 表示当前用户,\h 表示主机名,\w 表示当前工作目录。${debian_chroot:+($debian_chroot)}:如果系统中安装了Debian chroot,就在提示符中添加(debian_chroot)。\u@\h:\w\$ :显示当前用户名、主机名、工作目录,并以 $ 结尾。

2、设置环境变量

申明变量:export 变量名=变量值

#将PATH环境变量设置为包含 /usr/local/bin 和 /usr/bin 目录

export PATH=/usr/local/bin:/usr/bin:$PATH

查询环境变量:env

删除变量:unset 变量名

unset name

关于export:

export 命令用于将变量设置为环境变量,使其可以在程序的整个生命周期内使用。export 命令是 Bash shell 的内置命令,可以标记要传递给子进程的变量和函数。export 命令可用于将变量设置为子进程(子shell)的环境变量。

注: 子shell是命令处理器的一个独立例子。正如命令在命令行提示符处被理解和执行一样,一个脚本/批处理运行实际上是父shell的一个支线进程(子进程)。每一个shell脚本实际上是父shell的一个子进程。

pstree命令:pstree 命令是一个用于显示进程树的实用工具。该命令以树形结构显示当前运行在系统中的所有进程及其子进程,其中包含每个进程的PID(进程ID),以及它们之间的父子关系。

root@PC-20210418GNMD:~# pstree

init─┬─init───sshd

├─init───init───bash───bash───pstree

└─{init}

三、位置参数变量

1、什么是位置参数变量

位置参数变量是指在Shell脚本中用于获取命令行、函数或执行脚本时传递的参数的特殊变量。这些变量包括$n、$*、$@、$#等。

$n:n是数字,$0代表命令本身,$1-$9代表第一个到第九个参数,十以上的参数需要用大括号,如${10}。$*:代表所有的位置参数。它会将所有参数看作一个字符串。例如,假设你调用了一个脚本,如:./zhj1.sh a b c,那么$*就表示a b c三个参数整体。$@:代表所有的位置参数。它会将每个参数看作一个独立的字符串。例如,假设你调用了一个脚本,如:./zhj2.sh a b c,那么$@表示a b c三个参数,但是会把每个参数是独立的。$#:计算参数的个数。比如,用./zhj3.sh a b c调用脚本时,$#的值为3。

2、举例

$n

#!/bin/bash

$0

sum=$(( $1+$2 ))

echo $sum

我们在终端中运行以下命令:

$ chmod 755 test.sh # 赋予脚本执行权限

$ ./test.sh 1 2

脚本会输出如下结果:

./canshu.sh

3

$#

#!/bin/bash

echo $#

我们在终端中运行以下命令:

$ chmod 755 test.sh # 赋予脚本执行权限

$ ./test.sh 1 2 3 4 5 6 7

脚本会输出如下结果:

7

$*与$@

#!/bin/bash

for i in "$*"

do

echo "par $i"

done

x=1

for y in "$@"

do

echo "$x --- $y"

x=$(( $x + 1))

done

我们在终端中运行以下命令:

$ chmod 755 test.sh # 赋予脚本执行权限

$ ./test.sh 1 2 3 4 5 6 7

脚本会输出如下结果:

par 1 2 3 4 5 6 7

1 --- 1

2 --- 2

3 --- 3

4 --- 4

5 --- 5

6 --- 6

7 --- 7

四、预定义变量

1、什么是预定义变量

预定义变量是在Linux系统中提前定义的变量,可以在Shell脚本或命令行中直接使用,无需再次定义即可使用。这些预定义变量在Shell脚本中使用较为频繁,它们包括当前用户的家目录路径、系统查找可执行文件的路径列表、上一个命令的返回值等等。

2、常用的预定义变量

$?:上一个命令的返回值,通常用于判断命令执行是否成功(0表示成功,非0表示失败)。$$:当前进程(Shell脚本)的进程ID(PID)。$!:后台运行最后一个进程的进程ID(PID)。

$$与$!例子:

#!/bin/bash

echo "$$" # 输出当前 Shell 进程的进程 ID

find /root -name hello.sh & # 在后台运行查找 /root 目录下文件名为 hello.sh 的文件的命令

echo "$!" # 输出上一个后台任务的进程 ID

注:&&和||这两个逻辑运算符就是通过$?来判断上一个命令是否正确执行。

3、read命令

read是Linux Shell的一个命令,常用于从标准输入读取用户输入数据并赋值给变量。 read命令的语法为:read [选项] [变量...]

其中,主要有以下选项:

-p(prompt):指定输出的提示信息,如read -p "Please enter your name: " name;-t(timeout):指定等待用户输入的超时时间,单位为秒;-n(count):指定读取指定数量的字符后就结束,如read -n1 key表示只读取一个字符;-s:隐藏在终端上输入的字符,通常用于读取密码等敏感信息;

举例:

#!/bin/bash

read -t 30 -p "please input your name: " name

echo $name

read -s -t 30 -p "please input your password: " password

echo -e

echo $password

read -n 1 -t 30 -p "[M/F]: " sex

echo -e

echo $sex

我们在终端中运行以下命令:

$ chmod 755 test.sh

$ ./test.sh

脚本会输出如下结果:

please input your name: zhenghaojie

zhenghaojie

please input your password:

123456

[M/F]: F

F

五、数值运算与运算符

1、declare声明变量类型

declare 命令是一个用于 shell 编程中的内建命令,它用于声明变量并设置变量的属性,也可以用来显示 shell 函数和变量等信息。 declare命令语法为:declare [+/-] [选项] [变量名]

其中:

-:给变量设置类型属性;+:取消变量的类型属性;

常用选项:

-r(readonly):将变量设置为只读;-i(integer):将变量设置为整数;-a(array):将变量设置为数组类型;-f(function):显示已定义的函数名称;-p(print):以可执行命令的形式输出变量;-x(export):将变量设置为环境变量;

声明举例:

#声明一个只读变量,一旦变量被定义为只读,就不能再次更改或重复定义它。

declare -r name="zhenghaojie"

#声明一个整数变量,并将其初始化为10。

declare -i num=10

#声明一个数组变量,可以使用${arr[index]}来访问数组中的元素。

declare -a arr=("zheng" "hao" "jie")

#显示已定义的所有函数名称

declare -f

#输出变量的值

declare -p PATH

#声明一个环境变量

declare -x PATH="/usr/local/bin:$PATH"

2、常用运算方法

运算举例-方法一:

a=1

b=2

declare -i c=$a+$b

运算举例-方法二:

c=$(expr $a + $b)

注:

expr 是一个用于进行数学运算的工具,$(...) 是命令替换,表示执行括号内的命令并将其输出作为整体值替换成当前命令行。+号两侧的空格必须有。如果$a和$b不是整数类型的变量,在进行加法运算时可能会发生错误,因此可以使用declare -i命令将变量声明为整数类型以确保其是可加的。

运算举例-方法三:

c=$(($a+$b))

c=$[$a+$b]

注:

c=$(($a+$b)) 使用的是 Bash Shell 的算术扩展(Arithmetic Expansion)语法,其中$(())表示进行算术运算。c=$[$a+$b] 则使用的是 shell 的旧式语法,即美元符号和方括号 $[ ] 进行算术运算(已不推荐)。

3、运算符

按照优先级从高到低排序,如下:

(): 括号!: 逻辑非*、/、%: 乘法、除法、取模+、-: 加法、减法<<、>>: 位左移、位右移<、<=、>、>=: 小于、小于等于、大于、大于等于==、!=: 等于、不等于&: 位与^: 位异或|: 位或&&: 逻辑与||: 逻辑或=: 赋值运算符

举例: 算术运算符:+、-、*、/、%

a=10

b=20

# 加法

c=$((a + b))

echo $c # 输出 30

# 乘法

c=$((a * b))

echo $c # 输出 200

# 取模

c=$((a % b))

echo $c # 输出 10

位运算符:&、|、^、<<、>>

# 与运算

a=3

b=5

c=$((a & b))

echo $c # 输出 1

# 或运算

a=2

b=8

c=$((a | b))

echo $c # 输出 10

# 异或运算

a=3

b=5

c=$((a ^ b))

echo $c # 输出 6

# 左移运算

a=2

c=$((a << 2))

echo $c # 输出 8

# 右移运算

a=16

c=$((a >> 2))

echo $c # 输出 4

六、变量置换

变量置换方式变量y没有设置变量y为空值变量y设置值x=${y-新值}x=新值x为空x=$yx=${y:-新值}x=新值x=新值x=$yx=${y+新值}x为空x=新值x=新值x=${y:+新值}x为空x为空x=新值x=${y=新值}x=新值 y=新值x为空 y值不变x=$y y值不变x=${y:=新值}x=新值 y=新值x=新值 y=新值x=$y y值不变x=${y?新值}新值输出到标准错误输出x为空x=$yx=${y:?新值}新值输出到标准错误输出新值输出到标准错误输出x=$y

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: