shell之linux下shell中的变量(分类[环境级、用户级、系统级]、命名、转译、声明、变量值的传递、read、命令的别名、$?、函数)

一、变量的概念

  • 变量的定义:变量即在程序运行过程中它的值是允许改变的量,变量是计算机内存的单元,其中存放的值可以改变。
  • 变量是用一串固定的字符来标示不固定的值的一种方法
  • 变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储Script运行时可更改的程序信息
  • 在shell中变量是不能永久保存在系统中的,必须在文件中声明

二、变量的分类及其设定

  • 在shell中变量分为三类:环境级变量,用户级变量,系统级变量
  • 环境级变量只在当前 shell 中生效, shell 关闭变量丢失
  • 用户级变量写在用户的骨文件中,只针对当前用户生效
  • 系统级变量写在系统的配置文件 /etc/profile 或者 /etc/profile.d/ 中,对于所有用户都生效

2.1 三种变量的设定

环境级变量 : 直接在shell中输入export A=1来声明

环境级变量:只针对当前shell生效

在这里插入图片描述
export a=2使得所有的shell环境均识别这个a的值

在这里插入图片描述重新打开一个shell,echo $a 就没有a的值

在这里插入图片描述

用户级变量,只针对当前的用户有效(写在当前用户的骨文件当中)

(1)ls -a 可以查看家目录下面的所有所有隐藏文件(以.开头的文件)

在这里插入图片描述

(2)vim .bash_profile(编辑用户级的变量配置文件) 加入export ranran=1

在这里插入图片描述

(3)source .bash_profile 使文件生效
(4)su - student 切换到student 用户,且切换环境即shell,发现不可以查看ranran的值。
(5)su student只切换到student用户,不切换用户root的shell,发现可以查看。
(6)
bash
在root用户的shell中新打开一个shell,发现可以生效
在这里插入图片描述

在这里插入图片描述

  • su student与su - student的本质区别:
    su:切换用户后,不改变原用户的工作目录以及其他环境变量目录,只读系统级一个。
    su-: 切换用户后,同时切换到新用户的工作环境中,系统级和用户级两个都读

系统级的变量:写在系统的配置文件/etc/profile中,对所有的用户都生效

(1)vim /etc/profile (编辑系统变量的配置文件)

在这里插入图片描述

(2) source /etc/profile 使文件生效
(3)su - student 切换到student 用户,且切换环境即shell,发现可以查看chen的值。
(4)bash 在root用户的shell中新打开一个shell,发现可以查看chen的值。

在这里插入图片描述

三、shell中的变量

3.1 shell变量命名规则

  • 变量名必须是以字母或下划线字符“_”开头,后面跟字母、数字或下划线字符
  • 不可以使用? 、*或其他特殊字符命名变量。
  • 变量名和等号之间不能有空格

3.2 shell变量字符的转译(元字符存疑)

字符含义
\反斜杠转译单个字符
""双引号弱引用
‘’ 单引号强引用

注意:

  • 强引用:单引号括起来的字符都作为普通字符出现。
  • 弱引用:双引号括起来的字符除 $ 、\ (反斜杠) 、`(反引号) 和 "(双引号) 这四个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对待。
  • 元字符(* # ? ! 反向单引号)这些字符都有自身的含义,需要转义。

3.3 shell变量的声明

shell变量的声明 | $ { }

a=1在shell中直接定义a的值为1
echo $ab(默认会寻找ab这个整体的变量的值)
echo ${a}b这样才能声明a是变量

在这里插入图片描述

a=(1 2 3)定义一个数组
echo $a不可以
echo ${a[0]}输出数组的第一个元素
echo ${a[1]}输出数组的第二个元素
echo ${a[*]}输出数组的所有元素

在这里插入图片描述

3.4 shell变量值传递

字符含义
$1脚本后的第一串字符串
$2脚本后的第二串字符串
$n脚本后的第n串字符串
$#脚本后所跟字符串的个数
$*脚本后跟的所有字符串,模式为“ 1 2 3 ”
$@脚本后跟的所有字符串,模式为“ 1”“2”“3”
$$当前进程的pid
$!后台运行的最后一个进程的ID号

(1)首先编写一个脚本test.sh

在这里插入图片描述

(2)通过调用脚本来查看这些变量都代表什么值

在这里插入图片描述

(3)在脚本中加入watch -n 1 date
在这里插入图片描述
(4)执行脚本,然后ctrl+z把结果打入后台,ps f可以看到当前shell的pid,与$$对应,kill -9 结束当前进程
在这里插入图片描述

(5)删除脚本中watch -n 1 date
(6)sh test.sh ran1 ran2 ran3
在这里插入图片描述

$@,$*的区别 :

  • 假设在脚本运行时写了三个参数 1、2、3,则 " * " 等价于 “1 2 3”(传递了一个参数,只执行一次),而 “@” 等价于 “1” “2” “3”(传递了三个参数,执行三次)。

(1)$* 传递了一个参数,只执行一次
在这里插入图片描述

在这里插入图片描述

(2)$@ 传递了三个参数,执行三次

在这里插入图片描述

在这里插入图片描述

四、shell中交互式变量(read)

4.1什么是交互式变量

shell等待你的输入,并且立即执行你提交的命令。比如passwd命令。

4.2编写脚本实现交互式的操作

read -p " " | 显示输入内容
read -p -s " " | 不回显

(1)vim test.sh 编写一个简单的shell脚本

输入什么,显示什么

 #!/bin/bash
read -p "Please input yourname: " RANRAN    使用read命令实现交互式
echo "$RANRAN"

在这里插入图片描述

(2)sh test.sh 执行脚本在这里插入图片描述

4.3 脚本: 判断某ip是否可以ping通?

要求 : 用户自己输入要ping的ip地址,然后通了输出up,不通输出down

 #!/bin/bash
 read -p "Please input IP:"   IP                         ##用户输入要ping的ip
 ping -w1 -c1 $IP &> /dev/null && {                      ##ping一秒一次且过程打入垃圾箱
 		echo -e "\033[32m$IP is up\033[0m"               ## 如果可以ping通,就输出绿色ip is up
 }||{
         echo -e "\033[31m$IP is down\033[0m"            ## 如果可以ping不通,就输出红色ip is down
}

在这里插入图片描述

在这里插入图片描述

4.4 脚本:用户管理(当输入-d是删除用户,-c是新建用户并且改密码,输入不是-d和-c时候,报错)

在这里插入图片描述

在这里插入图片描述

五、命令的别名设置

(1)alias 查看已有的alias别名
(2)自己手动设置命令的别名

环境级:设置别名 alias ran=‘vim’ ;删除别名 unalias ran
用户级:编辑文件 .bashrc 添加alias ran=‘vim’
系统级:编辑文件/etc/bashrc 添加alias ran=‘vim’

环境级 只在当前shall生效

(1)alias ran='vim’
(2)ran 出现 vim的效果
在这里插入图片描述
在这里插入图片描述

(3)bash 新打开一个shell失效
在这里插入图片描述

用户级 : 只在当前用户生效

(1)vim .bashrc 编辑用户级文件,添加alias ran=‘vim’
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
(2)切换用户到student,无法使用vim的别名
在这里插入图片描述

系统级

(1)vim /etc/bashrc 写入 alias ran=‘vim’
在这里插入图片描述

(2)切换用户到student,可以使用vim的别名
在这里插入图片描述

在这里插入图片描述

六、引用变量的两种方式

  • 引用变量就是:让系统识别这个变量
  • 有两种方式:$() 和 ``
  • ``适合于所有的,反向单引号
  • $()适合于shell

(1)
echo `date`
echo $(date)

在这里插入图片描述
(2)编辑一个Perl语言脚本 vim test.prl
在这里插入图片描述
在这里插入图片描述

发现报错,perl并不识别$(),vim修改为``引用
在这里插入图片描述

在这里插入图片描述

七、命令执行结束后的退出值$?

  • 我们执行结束命令后无法确认所执行的命令是否成功的情况下,我们都会使用echo $? 来进行测试。
  • 当一个进程执行完毕时,该进程会调用一个名为_exit的例程来通知内核它已经做好"消亡"的准备了。该进程会提供一个退出码(一个整数)表明它准备退出的原因。按照惯例,0用来表示正常或者说"成功"的终止。当然,我们也可以自己指定退出值。我们执行echo $?时返回的值就是进程的退出码,而且,这个退出码是由刚刚执行完的进程提供给系统内核的。
  • 执行完成之后产生的退出值,范围是 0到255
  • 返回值的大概含义:

在这里插入图片描述
(1)
在这里插入图片描述
(2)编辑测试脚本

在这里插入图片描述
(3)执行成功,退出值为0
在这里插入图片描述
(3)在测试文件中,指定正常执行退出值为7
在这里插入图片描述

在这里插入图片描述

八、shell脚本中的函数

  • 什么是脚本中的函数: 首先得了解什么是脚本,脚本一般是网站服务器端程序,主要用于动态网站的服务请求响应,故脚本函数就是写在脚本中的特定功能函数。
  • 脚本中的函数是把一个复杂的语句块定义为一个字符串的方法,然后每次想使用某个功能的时候,直接调用函数。
  • 通过使用函数可以提高程序的可读性和重用性,避免重复编写相同的代码

简单函数示例
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可见我没有将echo -e这段代码反复的使用,而是定义了一个RED函数,然后只需要输入RED后面加内容,即可得到想要的东西

8.1 函数的调用

当函数定义好了后,用户就可以通过函数名调用该函数了,在shell中,函数调用的基本语法如下
function_name parm1 parm2

8.2 函数的返回值

  • 用户利用return来返回某个数值,再shell中,return语句只能返回某个0-255的整数值,再shell中还有一种方法获得函数执行的结果,就是使用echo。
  • shell中的函数(函数是一个功能,变量是值)
  • 函数功能:将所有的功能集成再一起,可以实现循环执行

示例:显示颜色
在这里插入图片描述

ECHO()来定义ECHO函数

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值