Shell 从入门到精通系列 (第一章 Shell编程基础)

1.什么是变量

从本质上讲,变量就是在程序中保存用户数据的一块内存空间,变量名就是这块内存空间的地址。在程序执行过程当中,保存数据的内存空间内容可能会不断发生变化,但是代表内存地址的linux删除文件命令变量名却保持不变,由于变量的值时在计linux算机的内存中,所以当计算机重启后,变量的值会丢失。

2.变量的命名

命名规范:

变量名由字母,数字,下划线组成,并且只能以字母或者下划线开头,用户应该选择有明确意义的英文单词作为变量名,尽量避免使用拼音或者毫无意义的字符串作为变量名

2.1 可读性好的变量名

HISTCONTROL=ignoredups:ignorespace

HISTSIZE=1000

2.2可读性差的变量名

abc=123

str1运维="hello,world"

2.3 变量名的大小写敏感

java=1.8

JAVA=1.9

两个变量的结果是不一样的

3. 变量的类型

shell是一种动态类型语言和弱类型语言,即在shell中,变量的类型无需显示的声明,变量的数据类型会根据不同的操作有所变化,准确的讲,shell中的变量是不分数据类型的,统一地按照字符串存储。

3.1 案例

#!/bin/bash

#定义变量x,并且赋值为123

x=123

#变量x加1

let "x += 1"

#输出变量x的值

echo "x = $x"

#把变量x中的1替换为abc

y=${x/1/abc}

#输出变量y的值

echo "y = $y"

#声明变量y

declare -i y

#输出变量y的值

echo "y = $y"

#变量y的值加1

let "y += 1"

#输出变量y巴沙鱼为什么不能吃的值

ech局部变量的作用域是什么o "y = $y"

#将字符串赋值给变量z

z=abc22

#输出变量z的值

echo "z = $z"

#把变量x中的1替换运维工程师需要掌握什么技能为abc

m=${z/八省联考成绩查询入口ab系统运维工资一般多少c/11}

#运维为什么没人干输出变量m的值

echo "m = $运维工作总结m"

#变量m的值加1

4变量名必须是一个有效的标识符.变量的定义

通常情况下,用户可以直接使用变量,无需先进行定义,在系统运维工程师用户第一次使用使用某个变量名时,linux常用命令实际上就同时定义了这个变量。

4.1 案例

#!/bin/bash

#定义变量a

a=1

#定义变量b

b="hello"

#定义变量c,如果变量的值包括空格,一定要用引号引起来

c="hello world"

4.2 declare 声明变量

格式:declare 属性 变量名

属性分类:

-p 显示所有变量的值

-i 将变量定义为整数

-r 将变量声明为只读变量

-a 将变量声明为数组

-f 显巴沙鱼示所有自定义函数

-x 将变量设置为环境变量

案例

#!/b变量名的命名规则in/bash

#定义变量x,并将一个算术式赋值给x

x=6/3

ecBashho "$x"

#定义变量x为整数

declare -linux操作系统基础知识i x

echo "$x"

#将算术式赋值给变量x

x=6/3

echo "$x"

#将局部变量和全局变量的区别字符串赋值给变量x

x=hello

echo "$x"

#将浮点数赋值给变量x

x=3.14

echo "$x"

#取消变量x的整数属性

d八神优eclare +i x

#重新将算术式赋值给变量x

x=6/3

echo "$x运维人员的出路在哪里"

#声明只读变量

declare -r x

echo "$x"

#尝试为只读变量赋值

x=5

echo "$x"

结果:

5.变量和引号

shell语言中一共有三种引号,单引号,双引号,linux删除文件命令反引号,这三种引号的作用不同

5.1 单引号('')

单引号引起来的都是普通字符,例如:

str='hello'

5.2 双引号("")

双引号括起来的字符除了局部变量存在堆还是栈 "$" , "\" , "'" , """ 这几个字符仍是特殊字符保留起特殊功能外,其余字符仍作为普通字符对待,例如:

root@k8s-master:~# b=123

root@k8s-master:~# str="$b"

root@k8s-master:系统/运维~# echo $str

$符号在这里有特殊意义,$b代表变量b的值

5.3 反引号(``)

反引号括起来的字符串被shel运维是做什么的l解释为命令,例如:

#!/bin/bash

#输出当前目录

echo "current directory is `pwlinuxd`"​​​

`pwd`列出当前目录局部变量如果没有指定初值

6.变量的作用域

shell中的变量分为全局变量和局部变量两种

6.1 全局变量

在shell脚本中,全局变量可以在脚本中定义,也可以在某个函数中定义,在脚本中定义的变量都是全局变量,其作用域为从定义的地方开始,到脚本结束或者被显示的删除

案例:

#!/bin/bash

#定义函数

func()

{

#输出变量v1的值

echo "$v1"

#修改变量x的值

v1=200

}

#在脚本中变量名必须是一个有效的标识符定义变量x

v1=100

#变量名必须是一个有效的标识符调用函数

func

#输出变量x的值

echo "$v1"

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

分析:

在脚本中定义了一个全局变量v系统运维工程师1=100, 然后调用函数,函数中打印v1的值为100,在函数中修改v1=200,最后在脚本中打印修改后的v1为200

案例:

在函数内部定义的变量也是全局变量

#!/bin/bash

#定义函数

func()

{

#在函数内部定义变量

v2=200

}

#调用函数

func

#输出变量的值

echo "$v2"

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

6.2 局部变量

在shell中,可以在函数内部通过local关键字来定义局部变量,函数的参数也是局部变量

local关键字定义局部变量

#!/bin/bash

#定义函数八神优

func()

{

#使用local关键字定义局部变量

local v2=200

}

#调用函数

func

#输出变量的值

echo "$v2"

运维工程师需要掌握什么技能果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

运维分析:

在函数内部定义了局部变量,无法在函数外面获取,所以结果为空

6.3 全局变量和局部变量名称相同时

函数内部的局部变量会屏蔽函数外部定义的全局变量,在出现同变量名合法的条件名的情况linux操作系统基础知识下,函数内部的局部变量会优先被使用

案例:

#linux是什么操作系统!/bin/bash

#定义函数

func()

{

#输变量名合法的条件出全局变量v1的值

echo "global variable v1 is $v1"

#定义局部变量v1

local v1=2linux操作系统基础知识

#输出局部变量v1的值

echo "local variable把实力藏得很深的星座 v1 i运维s $v1"

}

#定义全局变量v1

v1=1

#调用函数

func

#输出全局变量v1的值

echo "global variable v1 is八省联考成绩查询入口 $八神优v1"

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

7. 系统变量

shell中常局部变量是什么意思用的系统变量:

变量

说明

$n

n是一个整数,从运维为什么没人干0开始,表示参数的位置,$1表示第一个参数,$2表示第二个参数

$#

命令行参数的个数

$0

当前shell脚本的名称

$?

前一个命令或者函数的返回状态码

$*

以"参数1 参数2..."的形式将所有参数通过一局部变量和成员变量的区别个字符串返回

$@

以"参数八省联考成绩查询1"局部变量存在堆还是栈 “参数2”的形式返回每个参数

$$

返回运维工作总结本程序的进程ID(PID)

#!变量名的命名方法/bin/bash

#输出脚本的参数个数

echo变量名合法的条件 "the number of parameters is $#"

#输出上一个命令的退出状态变量名的命名方法

echo "the return code o局部变量是什么意思f last command is $?"

#输出linux当前脚本的名称

echo "the script name is $0"

#输出所有的参数

echo "the parameters are $*"

#输出其中的几个参数

echo "\$1=$1;\$2=$2;\$11=${11}"

执行结果:

​[root@k8s-master tmp]# bash te局部变量如果没有指定初值st.sh a b c d e f g h i j k l m n


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

8.环境变量

Shell 的环境变量是所有Shell程序都可以使用的变量,She巴沙鱼为什么不能吃ll中的环境变量全部用大写字母表示

常用的Shell环境变量:

PATH: 命令搜索路径,以冒号为分隔符

HOME: 用户主目录的路径名

COLUMNS: 命令linux系统编辑模式下可使用命令行的长度

HI八省联考排名STFIL运维工程师有前途吗E: 命令历史文件

HISTSI运维工程师需要掌握什么技能ZE: 命令历史文件中最多可包含的命令条数

HISTFILESIZE: 命八省联考成绩查询入口令历史文件中包含的最大行数

IFS: 定义shell使用的分隔符

LOGNAME: 当前的登录名

SHELL: Shell的全路径名

TERM:终端类型

TMOUT: Shell自动退出的时间,单位为秒,若设置为0,则禁止Shell自动退出

PWD: 当前工作目录

SET可以列出当前系统所有的环境变量:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

案例:

#!/bin/bash

#输出命令搜索路径

echo "commands path is $PATH"

#输出当前巴沙鱼为什么不能吃的登录名

echo "current login name is $LOGNAME"

#输出当前用户的主目录

echo系统运维工资一般多少 "current user's home is $HOME"

#输出当前的shell

echo "current shell is $SHELL"

#输出当前的工作目录

echo "current path is $PWD"

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

9.变量赋值和清空

9.1 变量赋值

在shell中,变量并不需要专门的定义和初始化语言,一个没有局部变量和全局变量的区别初始化的shell变量被认为是一个空运维工程师需要掌握什么技能字符串。

语法:

​variable_name=value

variable_name表示变量名,value表示要赋给变量的值

案例:

​v1=Lin局部变量和全局变量ux

v2='Centos7 Linux'

v3="curr变量名ent user's home is $HOME"

v局部变量的作用域是什么4=123

9.2 变量的引用

在shell中,可以通过在变量名前面加上 “$” 来获取变量的值。

案例:

#!/bin/bash

v1运维是做什么的=Linux

v2='Centos7 Linux'

v3="current user's home is $H巴沙鱼为什么不能吃OME"

v4=123

#输出变量v1的值

echo $v1

#输出变量v2的值

echo $v2

#输出变量v局部变量3的值

echo变量名 $v3

#输出变量v1的值

echo八省联考排名 $v4

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

特别注意:

​echo "$v4abc" 会shell开发报错,因为v4abc会作为一个局部变量如果没有指定初值变量名,然后我们并没有定义这个变量局部变量的作用域是什么,所以会报错

需要更改为 echo “${v4}abc”

​​9.3 清除变量

当某个变量不再使用时,可以将其清除

语法:

​unset variable_name

案例:

#!linux是什么操作系统/bin/bash

#定义变量v1

v1运维工程师需要掌握什么技能="Helinuxllo world"

#输出v1的值

echo "$v1"

#清除变量

unset v1

echo "the value of v1 has been reset"

#再次输出v1运维工程师考什么证书的值

echo "$v1"linux重启命令

结果变量名的命名规则:

​unse变量名的命名方法t v1之后,输出变量为空


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

​​​linux操作系统基础知识10. 变量引用

所谓引用,是将字符串用引用符号包括起来,以防止其变量名的命名规则中的特变量名是什么殊字符被shelinux命令ll解释为其他涵义

shell中一共运维是什么意思有4种引用符号:

双引号: 除美元符运维工程师号,单引号,反引号,反斜线之外,其他所有字符都保持字面意义

单引号: 所有的字符都保持字面意义

反引号: 反引号中的字符串将被解释为shell命令

linux是什么操作系统斜线:转义字符,屏蔽后的字符的特殊意义

10.1 全引用

在shell中,当一个字符串被单引号引用起来之后,其中所有的字符,除单引号本身之外,都将被解把实力藏得很深的星座释为字面意义,即字符本身的涵义。

案例:linux系统

#!/bin八省联考成绩查询/b变量名的命名方法ash

#定义变量v1

v1="test"

#输出含有变八省联考成绩查询入口量名的字符串

echo 'hello,$八省联考成绩查询入口v1'

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

10.2 部分引用

用双引号引起来的字巴沙鱼符串,其中所包含的字符除了美元符号($),反引号(`),反斜线(\)之外的所有其他字符,都将被解释为字局部变量和全局变量重名面意义,这成为部分引用

运维工程师有前途吗例:

#!/bin/bash

#定义变量v1

v1="test"

#输出含有变量名的字符串

echo "helinux是什么操作系统llo,$v1"

结果:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

11. 命令替换

所谓命令替换,是指在shell中,将某个shell命令执行的结果赋给某个变量。

语法:

`shell_command`

$(s八省联考成绩查询入口hell_command)

案例:

#!/bin/bash

#变量替换

v1=`pw变量名的命名规则d`

#输出变量的值

echo "current working directory is $v1"

或者

#!/bin/bash

#变量替换

v1=$(局部变量pwd)

#输出变量的值

echo "current working directory is $v1"

12. 转义

转义的作用是转换某些特殊字符的意义,转义用反斜线表示,当反斜线后面的一个字符具有特殊的意义时,反斜线将屏蔽字变量名合法的条件符的特殊意义,使得shell按照该字符的字面意义来解释

案例:


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)

链接:​​httpslinux://ke.qq.com/course/4300856?tuin=d8aedflinux必学的60个命令68​​


                                            Shell 从入门到精通系列 (第一章 Shell编程基础)