Day 32 shell变量及运算

一:变量概述

1.什么是变量

​ 变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念

​ 变量可以通过变量名访问,在指令式语言中,变量通常是可变的;在某些条件下也是不可变的

2.变量的规则

​ 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头

​ 中间不能有空格,可以使用下划线

​ 不能使用标点符号

​ 不能使用bash里的关键字

二:变量分类

1.自定义变量

​ 定义变量:变量名=变量值 例如:xingdian=123

​ 引用变量:$变量名 或 ${变量名}

​ 查看变量:echo $变量名

​ 取消变量:unset 变量名

​ 作用范围:仅在当前shell中有效,所以切换另一个终端会导致变量失效

2.环境变量

​ 定义环境变量:

​ 方法一: export back_dir2=/home/backup

​ 方法二 :先给自定义变量back_dir1赋值,然后export back_dir1 将自定义变量转换成环境变量

​ 引用环境变量:$变量名 或 ${变量名}

​ 查看环境变量:echo $变量名

​ 取消环境变量:unset 变量名

​ 变量作用范围:在当前shell和子shell有效

注意:

​ 环境变量拥有可继承性:export之后就拥有继承性

​ 永久生效:写到环境变量脚本,/etc/profile ~/.baserc ~/.bash_profile /etc/bashrc

案例:

[root@xingdiancloud ~]# vim /etc/profile  
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
[root@xingdiancloud ~]# vim ~/.bash_profile (只显示部分)
PATH=$PATH:$HOME/bin:/usr/local/mycat/bin

/etc/profile:针对于系统的环境变量,对所有用户生效

​ 这是系统最主要的shell设置文件,也是用户登陆时系统最先检查的文件,有关重要的环境变量都定义在此,其中包括PATH,USER,LOGNAME,MAIL,HOSTNAME,HISTSIZE,INPUTRC等。而在文件的最后,它会检查并执行/etc/profile.d/*.sh的脚本

~/.bash_profile:针对于用户的环境变量,只对当前登录用户生效

​ 这个文件是每位用户的bash环境设置文件,它存在与于用户的主目录中,当系统执行/etc/profile 后,就会接着读取此文件内的设置值。在此文件中会定义USERNAME,BASH_ENV和PATH等环境变量,但是此处PATH除了包含系统的$PATH变量外加入用户的“bin”目录路径

~/.bashrc

​ 接下来系统会检查~.bashrc文件,这个文件和前两个文件(/etc/profile 和.bash_profile)最大的不同是,每次执行bash时,.bashrc都会被再次读取,也就是变量会再次地设置,而/etc/profile,./bash_profile只有在登陆时才读取。就是因为要经常的读取,所以**/.bashrc文件只定义一些终端机设置以及shell提示符号等功能**,而不是定义环境变量

~/.bash_login

​ .bash_login默认不存在,**但如果/.bash_profile文件不存在,则系统会转而读取/.bash_login这个文件内容。**这是用户的登陆文件,在每次用户登陆系统时,bash都会读此内容,所以通常都会将登陆后必须执行的命令放在这个文件中

.profile

​ 如果~./bash_profile ./bash_login两个文件都不存在,则会使用这个文件的设置内容,其实它的功能与/.bash_profile相同

.bash_logout

​ 如果想在注销shell前执行一些工作,都可以在此文件中设置

[root@xingdiancloud ~]# vi ~.bash_logout
clear
仅执行一个clear命令在你注销的时候

~/.bash_history

​ 这个文件会记录用户先前使用的历史命令

注意:

​ 在/etc/profile.d建立独立的环境变量配置文件

​ 常用环境变量:USER UID HOME HOSTNAME PWD PATH

​ PATH:这个变量存放的是所有命令所在的路径 修改:PATH=$PATH:+目录

3.位置变量

$1 $2 $3 $4 $5 $6 $7 $8 $9 $10

位置变量并不会在脚本中进行赋值,而是在执行脚本时对其进行赋值

格式:

bash 含有位置变量的脚本文件 $1的赋值 $2的赋值 $3的赋值 …

案例:

[root@xingdiancloud sh]# cat xingdian.sh
#!/bin/bash
echo "hello $1"
[root@xingdiancloud sh]# bash xingdian.sh xingdian
hello xingdian
4.预定义变量
$0  脚本名
$*	所有的参数
$@ 	所有的参数
$# 	参数的个数
$$ 	当前进程的PID
$!  上一个后台进程的PID
$?	上一个命令的返回值,0表示成功,1表示失败
$USER 当前登录用户的用户名
$HOME 当前用户的家目录
$PATH 命令搜索路径,由冒号分割的目录列表组成
$UID 当前用户的UID
$HOSTNAME 当前主机名

案例:

[root@xingdiancloud sh]# cat test.sh
#!/bin/bash
echo "第2个位置参数是$2"
echo "第1个位置参数是$1"
echo "第4个位置参数是$4"echo "所有参数是: $*"
echo "所有参数是: $@"
echo "参数的个数是: $#"
echo "当前进程的PID是: $$"echo '$1='$1
echo '$2='$2
echo '$3='$3
echo '$*='$*
echo '$@='$@
echo '$#='$#
echo '$$='$$

三:变量赋值

1.显示赋值

​ 变量名=变量值

示例:

[root@xingdiancloud ~]# ip1=192.168.1.251
[root@xingdiancloud ~]# school="BeiJing 1000phone"
[root@xingdiancloud ~]# today1=`date +%F`
[root@xingdiancloud ~]# today2=$(date +%F)
变量中引用涉及到命令时使用两个反引号``或者$(),两者等价
2.键盘读入
read 变量名
read -p "提示信息: "  变量名
read -t 5 -p "提示信息: "  变量名  -t 后面跟秒数,定义输入字符的等待时间
read -n 2 变量名   -n 后跟一个数字,定义输入文本的长度,很实用。

案例1:

[root@xingdiancloud ~]# vim first.sh
back_dir1=/var/backup
read -p "请输入你的备份目录: " back_dir2
echo $back_dir1
echo $back_dir2
[root@xingdiancloud ~]# sh first.sh

案例2:

[root@xingdiancloud ~]# vim ping2.sh
#!/bin/bash							
read -p "Input IP: " ip                
ping -c2 $ip &>/dev/null		
if [ $? = 0 ];then					echo "host $ip is ok"	    
else											echo "host $ip is fail"	    
fi											
[root@xingdiancloud ~]# chmod a+x ping2.sh
[root@xingdiancloud ~]# ./ping.sh

注意:定义或引用变量时注意事项

​ " " 弱引用 可以实现变量和命令的替换

​ ’ ’ 强引用 不完成变量替换

​ `` 反引命令替换 等价于 $() 反引号中的shell命令会被先执行

[root@xingdiancloud ~]# school=1000phone
[root@xingdiancloud ~]# echo "${school} is good"
1000phone is good
[root@xingdiancloud ~]# echo '${school} is good'
${school} is good
[root@xingdiancloud ~]# touch `date +%F`_file1.txt  
[root@xingdiancloud ~]# touch $(date +%F)_file2.txt 
[root@xingdiancloud ~]# disk_free3="df -Ph |grep '/$' |awk '{print $4}'"	错误
[root@xingdiancloud ~]# disk_free4=$(df -Ph |grep '/$' |awk '{print $4}')
[root@xingdiancloud ~]# disk_free5=`df -Ph |grep '/$' |awk '{print $4}

四:变量运算

1.整数运算

方法一:expr

运算符和变量之间有空格

[root@xingdiancloud ~]# expr 1 + 2
[root@xingdiancloud ~]# expr $num1 + $num2    			+  -  \*  /  %

方法二:$(())

[root@xingdiancloud ~]# echo $(($num1+$num2))      	+  -  *  /   %
[root@xingdiancloud ~]# echo $((num1+num2))
[root@xingdiancloud ~]# echo $((5-3*2))	 
[root@xingdiancloud ~]# echo $(((5-3)*2))
[root@xingdiancloud ~]# echo $((2**3))
[root@xingdiancloud ~]# sum=$((1+2)); echo $sum

方法三:$[]

[root@xingdiancloud ~]# echo $[5+2]						         +  -  *  /  %
[root@xingdiancloud ~]# echo $[5**2]

方法四:let

[root@xingdiancloud ~]# let sum=2+3; echo $sum
[root@xingdiancloud ~]# let i++; echo $i
2.小数运算

​ 通过echo将值传给bc,使用bc做小数运算,scale指定小数点位数

加法运算(scale参数无效)

[root@xingdiancloud ~]# echo "5.999 + 5.001"|bc
6.000
[root@xingdiancloud ~]# echo "5.111+ 5.1114"|bc
10.2224

减法运算(scale参数无效)

[root@xingdiancloud ~]# echo "2.22 - 1.11"|bc
1.11

乘法运算

[root@xingdiancloud ~]# echo "5.12 * 5.6000"|bc
28.6720

注意:乘积小数点位数默认以乘数中小数点位数最多的为准(不指定scale参数)

除法运算

[root@xingdiancloud ~]# echo "scale=2;9.898 / 1.11"|bc
8.91
[root@xingdiancloud ~]# echo "9.898 / 1.11"|bc
8

五:扩展

1.内容的删除

统计变量长度:${#变量名}

标准查看:${变量名}

从前往后进行最短匹配,并删除匹配内容:${变量名#*匹配字符}

从前往后进行最长匹配,并删除匹配内容:${变量名##*匹配字符}

从后往前进行最短匹配,并删除匹配内容:${变量名%匹配字符*}

从后往前进行最长匹配,并删除匹配内容:${变量名%%匹配字符*}

案例一

[root@xingdian ~]# url=www.sina.com.cn
[root@xingdian ~]# echo ${#url}			    统计变量值的长度15
[root@xingdian ~]# echo ${url}			    标准查看
www.sina.com.cn
[root@xingdian ~]# echo ${url#*.}		    从前往后,最短匹配
sina.com.cn
[root@xingdian ~]# echo ${url##*.}		    从前往后,最长匹配	贪婪匹配
cn
[root@xingdian ~]# url=www.sina.com.cn
[root@xingdian ~]# echo ${url#a.}
www.sina.com.cn
[root@xingdian ~]# echo ${url#*sina.}
com.cn

案例二

[root@xingdian ~]# url=www.sina.com.cn
[root@xingdian ~]# echo ${url}
www.sina.com.cn
[root@xingdian ~]# echo ${url%.*}		从后往前,最短匹配
www.sina.com
[root@xingdian ~]# echo ${url%%.*}	从后往前,最长匹配	贪婪匹配
www
[root@xingdian ~]# echo $HOSTNAME
xingdian.1000phone.com
[root@xingdian ~]# echo ${HOSTNAME%%.*}
xingdian
2.索引及切片
[root@xingdian ~]# echo ${url:0:5}  //从头开始,向后5个结束
[root@xingdian ~]# echo ${url:5:3}	//从第6个开始,向后3个结束
[root@xingdian ~]# echo ${url:5}    //从第6个开始,直到结尾
3.变量内容替换
[root@xingdian ~]# url=www.sina.com.cn
[root@xingdian ~]# echo ${url/sina/baidu}
www.baidu.com.cn
[root@xingdian ~]# url=www.sina.com.cn
[root@xingdian ~]# echo ${url/n/N}  //只替换匹配到的第一个
www.siNa.com.cn
[root@xingdian ~]# echo ${url//n/N}	//替换匹配到的所有,贪婪匹配
www.siNa.com.cN
4.自增运算

对变量的值的影响

[root@xingdian ~]# i=1
[root@xingdian ~]# let i++
[root@xingdian ~]# echo $i
2
[root@xingdian ~]# j=1
[root@xingdian ~]# let ++j
[root@xingdian ~]# echo $j
2

对表达式的值的影响

[root@xingdian ~]# unset i
[root@xingdian ~]# unset j
[root@xingdian ~]# 
[root@xingdian ~]# i=1
[root@xingdian ~]# j=1
[root@xingdian ~]# 
[root@xingdian ~]# let x=i++         先赋值,再运算
[root@xingdian ~]# let y=++j         先运算,再赋值
[root@xingdian ~]# 
[root@xingdian ~]# echo $i
2
[root@xingdian ~]# echo $j
2
[root@xingdian ~]# 
[root@xingdian ~]# echo $x
1
[root@xingdian ~]# echo $y
2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/837666.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国的“AI四小龙”能否与OpenAI的ChatGPT一争高下?

中国的“AI 四小龙”和 OpenAI 的 ChatGPT 都在人工智能领域有一定的影响力,但它们在不同方面可能具有各自的优势和局限性。 中国的“AI 四小龙”指的是云从科技、商汤科技、旷视科技和依图科技。这些公司在人工智能的多个领域进行研究和开发,包括计算机…

kafka基础知识

kafka架构 producer -> kafka cluster(broker>topic>partition) -> consumer -> zookeeper kafka压测 kafka-producer-perf-test.sh kafka-consumer-perf-test.sh kafka日志保存位置及消息保存时间 /tpdata/client/Kafka/kafka/config/server.properties log.…

FreeRTOS 第十一章 通知

从v8.2.0版本开始,FreeRTOS新增了任务通知(Task Notification)功能。可以使用任务通知拉代替信号量、消息队列、事件标志等。使用任务通知效率会高些。 任务通知是一个可选的功能,FreeRTOS的每个任务都有一个32位的通知值。任务控制块的成员变量ulBotif…

图的表示(利用边结构描述的图来构建图结构)

#include<iostream> #include<vector> #include<map> #include<set> using namespace std;//边结构的描述 class Edge { public://边的起始节点Node from;//边的终点节点Node to;//边的权重int weight; public:Edge(Node from, Node to, int weight){t…

52岁「豹嫂」代夫尽孝送花畀奶奶被赞

歌手胡蓓蔚与「豹哥」单立文相爱28年&#xff0c;两人曾上节目分享婚姻之道&#xff0c;指婚姻最紧要有忍耐力&#xff0c;要抗拒引诱。其实除了忍耐力&#xff0c;胡蓓蔚和奶奶相处都有一套。 早前单立文带胡蓓蔚及妈妈到米芝连一星餐厅叹美食&#xff0c;庆祝奶奶89岁生日&am…

macOS Sonoma 14.5(23F79)发布

系统介绍 黑果魏叔5 月 14 日快报&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14.5 正式版更新&#xff08;内部版本号&#xff1a;23F79 同 RC&#xff09;。这是去年 9 月发布的 macOS Sonoma 操作系统的第五次更新&#xff0c;距离上一次的 macOS Sonoma 14.4 更新已…

Mysql 隔离级别

MySQL的事务隔离级别是指在处理并发事务时&#xff0c;为保证数据的一致性和事务的独立性&#xff0c;数据库系统提供的不同级别控制策略。根据ACID特性中的隔离性&#xff08;Isolation&#xff09;&#xff0c;MySQL支持四种标准的事务隔离级别&#xff0c;每种级别有不同的并…

RustGUI学习(iced)之小部件(十):如何使用tooltip部件来制作文字提示?

前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十篇,主要讲述tooltip部件的使用,会结合实例来…

osdoc开源文档(最好用的手册地址,包括 Markdown 等手册)

文章目录 osdoc开源文档&#xff08;最好用的手册地址&#xff0c;包括 Markdown 等手册&#xff09;前言地址Markdown 手册地址 osdoc开源文档&#xff08;最好用的手册地址&#xff0c;包括 Markdown 等手册&#xff09; 前言 最近在看md手册&#xff0c;无意间发现这个网站…

如果你要开发一个中小学生学习数学的软件,你应该找谁去做用户调研?

&#xff08;学校作业&#xff09; 1、学生家长&#xff1a;学生家长是最清楚学生的一个群体之一&#xff0c;他们也是这个软件的潜在使用者。软件设计时可能会考虑到家长监督学生的学习情况来设计其中的功能。 2、教师&#xff1a;教师最清楚学生的学习习惯、思维方式&#xf…

AcWing166. 数独-DFS剪枝与优化

题目 思路 思考问题&#xff1a;搜索顺序->考虑剪枝搜索顺序&#xff1a;先随意选择一个空格子&#xff0c;枚举该格子可填写的数字&#xff0c;当所有格子都填完的时候&#xff0c;说明可以退出了剪枝&#xff1a; 优化搜索顺序&#xff1a;随意选择一个空格子&#xff1a…

今日总结2024.5.14

今日复习了分组背包的用法 P1064 [NOIP2006 提高组] 金明的预算方案 题目描述 金明今天很开心&#xff0c;家里购置的新房就要领钥匙了&#xff0c;新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是&#xff0c;妈妈昨天对他说&#xff1a;“你的房间需要购买哪些物…

机器学习-12-sklearn案例02-集成学习

总结 参考 菜菜的sklearn课堂——随机森林 傻子都能看懂的——详解AdaBoost原理 算法使用过程 #导入数据集模块 from sklearn import datasets #分别加载iris和digits数据集 iris datasets.load_iris() #鸢尾花数据集 # print(dir(datasets)) # print(iris_dataset.keys…

76岁林子祥升级做爷爷,亲自为孙女取名

林子祥与前妻吴正元的儿子&#xff0c;现年39岁的林德信入行以来绯闻不少&#xff0c;自与圈外女友Candace拍拖后便修心养性&#xff0c;去年他已经低调与拍拖5年多Candace完婚&#xff0c;正式步入人生另一阶段。 昨日&#xff08;5月12日&#xff09;林德信借母亲节这个温馨日…

C++ 并发编程指南(11)原子操作 | 11.4、通过内存序实现顺序模型

文章目录 一、通过内存序实现顺序模型1、Relaxed Ordering2、Sequencial Consistent Ordering3、Acquire Release Ordering 前言 前文介绍了六种内存顺序&#xff0c;以及三种内存模型&#xff0c;本文通过代码示例讲解六种内存顺序使用方法&#xff0c;并实现相应的内存模型。…

【MySQL数据库开发设计规范】之索引设计规范

欢迎点开这篇文章&#xff0c;自我介绍一下哈&#xff0c;本人姑苏老陈 &#xff0c;是一名JAVA开发老兵。 本文收录于 《MySQL数据库开发设计规范》专栏中&#xff0c;该专栏主要分享一些关于MySQL数据库开发设计相关的技术规范文章&#xff0c;定期更新&#xff0c;欢迎关注&…

【综述】人工智能、机器学习、深度学习

文章目录 前言 概念 算法 训练 性能 应用 参考资料 前言 见《初试人工智能》 概念 人工智能系统&#xff08;artifieial intelligence system&#xff09;&#xff0c;针对人类定义的给定目标&#xff0c;产生诸如内容、预测、推荐或决策等输出的一类工程系统。该工程系…

【C++】string|迭代器iterator|getline|find

目录 ​编辑 string 1.string与char* 的区别 2.string的使用 字符串遍历 利用迭代器遍历 范围for遍历 反向迭代器 字符串capacity 字符串插入操作 push_back函数 append函数 运算符 ​编辑 insert函数 substr函数 字符串查找函数 find函数 rfind函数 …

Go 处理错误

如果你习惯了 try catch 这样的语法后&#xff0c;会觉得处理错误真简单&#xff0c;然后你再来接触 Go 的错误异常&#xff0c;你会发现他好复杂啊&#xff0c;怎么到处都是 error&#xff0c;到处都需要处理 error。 首先咱们需要知道 Go 语言里面有个约定&#xff0c;就是一…

灵活的静态存储控制器 (FSMC)的介绍(STM32F4)

目录 概述 1 认识FSMC 1.1 应用介绍 1.2 FSMC的主要功能 1.2.1 FSMC用途 1.2.2 FSMC的功能 2 FSMC的框架结构 2.1 AHB 接口 2.1.1 AHB 接口的Fault 2.1.2 支持的存储器和事务 2.2 外部器件地址映射 3 地址映射 3.1 NOR/PSRAM地址映射 3.2 NAND/PC卡地址映射 概述…