Shell变量使用

变量

变量就是⽤⼀个简单的好记的字符串,来取代⽐较复杂或者容易变动的数据。变量分类:预定义变量、环境变量、自定义变量、位置变量。

1、变量的设定规则

  • 变量名与变量内容以⼀个等号 = 的连结,且等号两边不能有空格。
  • 变量名称只能是英⽂字⺟与数字,但是开头字符不能是数字。
name1=xiaobai   #正确示例
2name=xiaobai   #错误示例
name3 = xiaobai   #错误示例

2、变量的使用

  • 变量内容中若有空格可以使⽤双引号或单引号(一定是英文符号)将变量内容组合起来,双引号内的特殊字符仍保有原本的特性,单引号内则全部视为普通字符。
#双引号
name=xiaobai   #定义name为变量
name2="I am $name"   #使用双引号并定义一个新的变量
echo $name2   
I am xiaobai   #新变量的结果

#单引号
name3='I am $name'   #单引号定义新变量
echo $name3
I am $name   #新变量的结果
  • 感叹号在shell命令⾏⾥不可以用在双引号⾥,但是可以在脚本中使⽤。
  • 可⽤转意符 \ 将特殊符号(如 [Enter] , $ , \ , 空格符 , 等)变成⼀般字符。
  • 在一串命令中,还需要藉由其他的命令提供的信息,可以使⽤反单引号 `命 令` 或 $(命 令),(注意:反引号不是单引号)。
version=$(uname -r)
echo $version
3.10.0-957.el7.x86_64   #version的值就是uname-r查看的值
  • 增加变量的内容时,则可⽤ "$变量名称"字符串 或 ${变量}字符串累加内容。
PATH="$PATH":/home/bin
PATH=${PATH}:/home/bin
  • 若该变量需要在其他⼦程序执⾏,则需要以 export 来使变量变成环境变量(export+变量名 或者 export+定义的变量),只能向下继承。
  • 取消变量使⽤unset(unset+变量名)
#上诉示例
[root@xiaobai] n=1
[root@xiaobai] echo $n
1
[root@xiaobai] unset n
[root@xiaobai] echo $n
#unset是删除变量的值

[root@xiaobai] name=xiaobai
[root@xiaobai] age=20
[root@xiaobai] info=$name$age
[root@xiaobai] echo $info
xiaobai20
#此时要在xiaobai和20中间加个is
[root@xiaobai] info=$nameis$age
[root@xiaobai] echo $info
20
#我们发现只有20一个值,这是因为系统会认为nameis是一个变量,我们加个大括号再试试
[root@xiaobai] info=${name}is$age
[root@xiaobai] echo $info
xiaobaiis20
#我们可以在用引号引起来,加上空格方便查看
[root@xiaobai] info="${name} is $age"
[root@xiaobai] echo $info
xiaobai is 20

[root@xiaobai] path=${PATH}
[root@xiaobai] echo $path
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@xiaobai] echo ${path%:*}   #删除值的最后一个
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
#最后一个值被删掉了
[root@xiaobai] echo ${path#*:}   #删除值的第一个
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

% 从字符串的后面开始进行匹配删除,匹配到的第一个就删除并停止匹配
# 从字符串的前面开始进行匹配删除,匹配到的第一个就删除并停止匹配
:* 需要匹配的字符,:为普通字符,*为通配符表示任何数量的任意字符

变量的替换与删除
在这里插入图片描述

环境变量

常见的环境变量有PATH(存储所有命令所在的路径)、HOME、MAIL、SHELL、PWD 、USERNAME、UID、ID。(HOME、UID、MAIL会根据用户的不同而改变其值),总体都可以根据环境变量文件中的设置而改变。

echo $RANDOM   #会随机生成一个数字且不会重复,可以在脚本中使用

位置变量

位置变量一般用于脚本中

预定义变量

预定义变量是默认就有的,值不需要我们重新定义,且值会根据程序的变化而变化

$?   #上一个命令的返回值,返回0则表示成功,非0则表示不成功
$$   #当前进程号PID
$!   #最近一个后台任务的进程号

Bash环境变量的文件

longin shell:取得shell时需要完整的登入流程;特点是登入时需要用户账号和密码
no-longin shell:取得shell时不需要再次输入账号和密码的情况下,所得到的shell

longin shell会读取以下两个文件
/etc/profile系统整体设定,最好不要修改
~/.bash_profile~/.bash_login~/.profile:属于个人的配置文件

/etc/profile会主动义序调用以下的脚本文件

  • /etc/inputrc:定义快捷键
  • /etc/profile.d/*sh:定义bash的操作接口颜色、语系、命令别名等(添加全局变量,推荐在/etc/profile.d下创建以 .sh 结尾的文件,不建议去/etc/profile里修改)
  • /etc/locale.cof:定义系统的默认语系

bash在读完/etc/profile后,接下来会读取以下 3个文件,且只会读取一个,会按照以下顺序优先读取

  • ~/.bash_profile会调用~/.bashrc,也会有新的环境变量在下面的文件中添加
  • ~/.bash_login
  • ~/.profile

最终~/.bashrc才是最后被读入到系统环境中的文件

键盘输入给变量赋值

read -t 5 -p "你的名字:" name
-p:后面接提示字符
-t:后接等待的时间,单位秒

试验一下(可以写在脚本中,也可以在命令行中执行)
[root@xiaobai] read -p "你的名字:" name
你的名字:xiaobai
[root@xiaobai] echo $name
xiaobai

[root@xiaobai] read -t 5 -p "你的名字:" name
你的名字:
这次我们等待5秒什么也不输入,也不敲回车,5秒后会自动结束这个进程
[root@xiaobai] echo $name

我们会看到刚刚我们没有输入,所以name被赋予了一个空值

时间运算

[root@xiaobai] date   #查看时间
Sat May  2 09:44:37 CST 2020   #本白的机器时间与宿主机是不同步的
[root@xiaobai] date +%T -d '3 hours'   #3个小时后是几点
12:44:50

[root@xiaobai] date +%F -d "20200505 1 day"   #20200505后一天的日期
2020-05-06
[root@xiaobai] date +%F -d "20200505 -1 day"   #20200505前一天的日期
2020-05-04

[root@xiaobai] d1=$(date +%s -d 20200505)
[root@xiaobai] d2=$(date +%s -d 20200501)
[root@xiaobai] echo $(((d1-d2)/86400))   #86400为一天的秒数
4
#4为天数

文章总览分类目录 @小白

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值