shell编程模块课程目标(中)

简介: shell编程模块课程目标

二、变量的定义


1. 变量是什么?

一句话概括:变量是用来临时保存数据的,该数据是可以变化的数据。


2. 什么时候需要定义变量?

如果某个内容需要多次使用,并且在代码中重复出现,那么可以用变量代表该内容。这样在修改内容的时候,仅仅需要修改变量的值。

在代码运作的过程中,可能会把某些命令的执行结果保存起来,后续代码需要使用这些结果,就可以直接使用这个变量。


3.变量如何定义?

变量名=====变量值


变量名:用来临时保存数据的


变量值:就是临时的可变化的数据


[root@MissHou~]#A=hello定义变量A[root@MissHou~]#echo$A调用变量A,要给钱的,不是人民币是美元"$"hello[root@MissHou~]#echo${A}  还可以这样调用,不管你的姿势多优雅,总之要给钱hello[root@MissHou~]#A=world因为是变量所以可以变,移情别恋是常事[root@MissHou~]#echo$A不管你是谁,只要调用就要给钱world[root@MissHou~]#unsetA不跟你玩了,取消变量[root@MissHou~]#echo$A从此,我单身了,你可以给我介绍任何人



4. 变量的定义规则

虽然可以给变量(变量名)赋予任何值;但是,对于变量名也是要求的!😒


㈠ 变量名区分大小写

[root@MissHou~]#A=hello[root@MissHou~]#a=world[root@MissHou~]#echo$Ahello[root@MissHou~]#echo$aworld


㈡ 变量名不能有特殊符号

[root@MissHou~]#*A=hello-bash: *A=hello: commandnotfound[root@MissHou~]#?A=hello-bash: ?A=hello: commandnotfound[root@MissHou~]#@A=hello-bash: @A=hello: commandnotfound特别说明:对于有空格的字符串给变量赋值时,要用引号引起来[root@MissHou~]#A=helloworld-bash: world: commandnotfound[root@MissHou~]#A="hello world"[root@MissHou~]#A='hello world'


㈢ 变量名不能以数字开头

[root@MissHou~]#1A=hello-bash: 1A=hello: commandnotfound[root@MissHou~]#A1=hello注意:不能以数字开头并不代表变量名中不能包含数字呦。


㈣ 等号两边不能有任何空格

[root@MissHou~]#A=123-bash: A: commandnotfound[root@MissHou~]#A=123-bash: 123: commandnotfound[root@MissHou~]#A=123-bash: A: commandnotfound[root@MissHou~]#A=123[root@MissHou~]#echo$A123


㈤ 变量名尽量做到见名知意

NTP_IP=10.1.1.1DIR=/u01/app1TMP_FILE=/var/log/1.log...
说明:一般变量名使用大写(小写也可以),不要同一个脚本中变量全是a,b,c等不容易阅读


5. 变量的定义方式有哪些?

㈠ 基本方式

直接赋值给一个变量


[root@MissHou~]#A=1234567[root@MissHou~]#echo$A1234567[root@MissHou~]#echo${A:2:4}  表示从A变量中第3个字符开始截取,截取4个字符3456说明:$变量名${变量名}的异同相同点:都可以调用变量不同点:${变量名}可以只截取变量的一部分,而$变量名不可以


㈡ 命令执行结果赋值给变量

[root@MissHou~]#B=`date+%F`[root@MissHou~]#echo$B2019-04-16[root@MissHou~]#C=$(uname-r)
[root@MissHou~]#echo$C2.6.32-696.el6.x86_64


㈢ 交互式定义变量(read)

**目的:**让用户自己给变量赋值,比较灵活。


语法:read [选项] 变量名


常见选项:


选项 释义
-p 定义提示用户的信息
-n 定义字符数(限制变量值的长度)
-s 不显示(不显示用户输入的内容)
-t 定义超时时间,默认单位为秒(限制用户输入变量值的超时时间)



举例说明:


用法1:用户自己定义变量值

[root@MissHou~]#readnameharry[root@MissHou~]#echo$nameharry[root@MissHou~]#read-p"Input your name:"nameInputyourname:tom[root@MissHou~]#echo$nametom用法2:变量值来自文件[root@MissHou~]#cat1.txt10.1.1.1255.255.255.0[root@MissHou~]#readipmask<1.txt[root@MissHou~]#echo$ip10.1.1.1[root@MissHou~]#echo$mask255.255.255.0



㈣ 定义有类型的变量(declare)

**目的:**给变量做一些限制,固定变量的类型,比如:整型、只读


用法:declare 选项 变量名=变量值


常用选项:


选项 释义 举例
-i 将变量看成整数 declare -i A=123
-r 定义只读变量 declare -r B=hello
-a 定义普通数组;查看普通数组
-A 定义关联数组;查看关联数组
-x 将变量通过环境导出 declare -x AAA=123456 等于 export AAA=123456


举例说明:


[root@MissHou~]#declare-iA=123[root@MissHou~]#echo$A123[root@MissHou~]#A=hello[root@MissHou~]#echo$A0[root@MissHou~]#declare-rB=hello[root@MissHou~]#echo$Bhello[root@MissHou~]#B=world-bash: B: readonlyvariable[root@MissHou~]#unsetB-bash: unset: B: cannotunset: readonlyvariable


6. 变量的分类

㈠ 本地变量

本地变量:当前用户自定义的变量。当前进程中有效,其他进程及当前进程的子进程无效。

㈡ 环境变量

环境变量:当前进程有效,并且能够被子进程调用。

env查看当前用户的环境变量

set查询当前用户的所有变量(临时变量与环境变量)

export 变量名=变量值 或者 变量名=变量值;export 变量名

[root@MissHou~]#exportA=hello临时将一个本地变量(临时变量)变成环境变量[root@MissHou~]#env|grep^AA=hello永久生效:vim/etc/profile或者~/.bashrcexportA=hello或者A=helloexportA说明:系统中有一个变量PATH,环境变量exportPATH=/usr/local/mysql/bin:$PATH


㈢ 全局变量

全局变量:全局所有的用户和程序都能调用,且继承,新建的用户也默认能调用.


解读相关配置文件


文件名 说明 备注

$HOME/.bashrc 当前用户的bash信息,用户登录时读取 定义别名、umask、函数等

$HOME/.bash_profile 当前用户的环境变量,用户登录时读取

$HOME/.bash_logout 当前用户退出当前shell时最后读取 定义用户退出时执行的程序等

/etc/bashrc 全局的bash信息,所有用户都生效

/etc/profile 全局环境变量信息 系统和所有用户都生效

$HOME/.bash_history 用户的历史命令 history -w 保存历史记录 history -c 清空历史记



**说明:**以上文件修改后,都需要重新source让其生效或者退出重新登录。


用户登录系统读取相关文件的顺序

/etc/profile

$HOME/.bash_profile

$HOME/.bashrc

/etc/bashrc

$HOME/.bash_logout

㈣ 系统变量

系统变量(内置bash中变量) : shell本身已经固定好了它的名字和作用.


内置变量 含义

$? 上一条命令执行后返回的状态;状态值为0表示执行正常,非0表示执行异常或错误

$0 当前执行的程序或脚本名

$# 脚本后面接的参数的个数

$* 脚本后面所有参数,参数当成一个整体输出,每一个变量参数之间以空格隔开

$@ 脚本后面所有参数,参数是独立的,也是全部输出

$1~$9 脚本后面的位置参数,$1表示第1个位置参数,依次类推

${10}~${n} 扩展位置参数,第10个位置变量必须用{}大括号括起来(2位数字以上扩起来)

$$ 当前所在进程的进程号,如echo $$

$! 后台运行的最后一个进程号 (当前终端)

!$ 调用最后一条命令历史中的参数


进一步了解位置参数$1~${n}

#!/bin/bash#了解shell内置变量中的位置参数含义echo"\$0 = $0"echo"\$# = $#"echo"\$* = $*"echo"\$@ = $@"echo"\$1 = $1"echo"\$2 = $2"echo"\$3 = $3"echo"\$11 = ${11}"echo"\$12 = ${12}"


进一步了解$*和$@的区别

$*:表示将变量看成一个整体

$@:表示变量是独立的


/

#!/bin/bashforiin"$@"doecho$idoneecho"======我是分割线======="foriin"$*"doecho$idone[root@MissHou~]#bash3.shabcabc======我是分割线=======abc


相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
28天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
Shell
Shell编程(下)
Shell编程(下)
92 1
|
2月前
|
Shell Linux Windows
Shell编程(上)
Shell编程(上)
42 1
|
2月前
|
Shell Linux 开发工具
|
2月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
71 12
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
存储 Unix Shell
shell脚本编程基础
【9月更文挑战第4天】
46 12
|
3月前
|
Shell Linux
Shell 编程 编写hello word
Shell 编写hello word
54 5
下一篇
无影云桌面