您的位置:首页 > 汽车 > 新车 > 大企业网站建设费用_汉中市建设工程项目审批管理系统_湖南长沙最新疫情_今日新闻快讯

大企业网站建设费用_汉中市建设工程项目审批管理系统_湖南长沙最新疫情_今日新闻快讯

2025/1/12 2:37:51 来源:https://blog.csdn.net/2302_77791905/article/details/144619283  浏览:    关键词:大企业网站建设费用_汉中市建设工程项目审批管理系统_湖南长沙最新疫情_今日新闻快讯
大企业网站建设费用_汉中市建设工程项目审批管理系统_湖南长沙最新疫情_今日新闻快讯

在程序设计语言中,变量是一个非常重要的概念。也是初学者在进行Shell程序设计之前必须掌 握的一个非常基础的概念。只有理解变量的使用方法,才能设计出良好的程序。本节将介绍Shell中变量 的相关知识。

1、什么是变量

顾名思义,变量就是程序设计语言中的一个可以变化的量,当然,可以变化的是变量的值。几 乎所有的程序设计语言中都有定义变量,并且其涵义也大同小异。从本质上讲,变量就是在程序中保存 用户数据的一块内存空间,而变量名就是这块内存空间的地址。

在程序的执行过程中,保存数据的内存空间的内容可能会不断地发生变化,但是,代表内存地 址的变量名却保持不变。

2、变量的命名

  • 可以使用数字,字母,和下划线给变量命名
  • 不能用数字开头
  • 如果给同一个变量赋值多次,最后一次赋值会覆盖之前的值

合法的变量名:name NMAE name1 name_1 Name_1

不合法的变量名:1name name*1 name_1%

3、查看变量的值

1.查看单个变量的值

  • echo $PATH
  • echo ${PATH}
  • printf "$PATH\n"
  • printf "${PATH}\n"

2.查看多个变量的值

  • set:查看所有的变量和函数
  • declare:查看所有的变量和函数
  • env:显示所有的全局变量

4、变量的定义

在命令行中定义:退出当前进程后该变量就失效,其他终端上无法使用该变量

var='xiaoming2'

var="`cmd`"

var="$(cmd)"

在文件中定义:永久生效

当前用户生效的文件

~/.bashrc 和 ~/.bash_profile

所有用户生效的文件

/etc/bashrc , /etc/profile ,/etc/profile.d/*.sh

su和su -切换方式加载的文件不同:

 [root@node13 ~]# su - studentLast login: Sun Sep 18 23:06:43 CST 2022 on pts/0/etc/profile/etc/profile.d/name3.sh/etc/bashrc/home/student/.bash_profile/home/student/.bashrc/etc/bashrc[root@node13 ~]# su student/home/student/.bashrc/etc/bashrc/etc/profile.d/name3.sh

5、变量的分类

(1)局部变量(普通变量):只在某个特定范围生效的变量,比如只能在当前进程中使用的变量,只能 在函数中使用的变量。

在命令行设置:在当前进程生效

在脚本文件中设置:在脚本文件中生效

在函数中定义普通变量:local var="value",只在当前函数中生效

在用户登录时加载的文件中设置:在脚本文件中无法使用

(2)全局变量(环境变量):可以在创建他们的shell及其派生出来的子进程中使用(su 切换用户的时 候会读取新的环境变量)。

自定义环境变量和bash内置的环境变量。

1.自定义环境变量

  • export var或 export var="value"
  • declare -x var="value", bash内置环境变量 declare +x var可取消环境变量

2.bash内置环境变量

shell程序在运行时,会接受一组变量来确定登录用户名、命令路径、终端类型、登录目录等等,这 些变量就是环境变量。shell内置的环境变量是所有的shell程序都可以使用的变量,环境变量会影响 所有的脚本的执行结果。

3.位置参数和预定义变量

很多情况下,shell脚本需要接受用户的输入,根据用户的输入来执行不同的操作。

从命令行传递给shell脚本的参数又称为叫做位置参数,shell脚本会根据参数的位置使用不同的位置参数 变量读取他们的值

6、取消变量

unset var

7、 变量的运算

应用场景

1. 计数器:在循环中使用变量来计数,例如计算文件的数量或循环迭代次数。

2. 计算和比较:在脚本中进行条件判断时,可能需要比较两个数值变量的大小。

3. 数据处理:处理文本数据时,可能需要修改字符串的长度或进行字符编码转换。

4. 系统资源管理:根据系统资源使用情况(如内存或磁盘空间)进行计算,以决定是否执行特 定操作。

5. 时间计算:计算脚本执行时间,或者根据日期和时间进行运算。

6. 配置和设置:根据脚本输入或环境变量计算配置参数。

与其他的程序设计语言一样,shell也有很多运算符。

示例:

[root@localhost ~]# r=$((2+5*8))[root@localhost ~]# echo $r42
[root@localhost ~]# let r=3+2[root@localhost ~]# echo $r5[root@localhost ~]# r=`expr 4+2`[root@localhost ~]# echo $r4+2[root@localhost ~]# r=`expr 4 + 2`[root@localhost ~]# echo $r6#使用expr计算字符的长度
[root@localhost test4]# char="i have a"[root@localhost test4]# expr length "$char"8[root@localhost ~]# r=$[3+2][root@localhost ~]# echo $r5[root@localhost ~]# awk  'BEGIN {print 2+3*2}'8[root@localhost test4]# echo "6.282 3.14" | awk '{print ($1-$2)}'3.142[root@localhost ~]# declare -i r=3+2[root@localhost ~]# echo $r5

实验:计算用户输入的任意两个整数的和、差、乘积、商、余数。

方法一:

[root@localhost test4]# cat 1.sh 
#!/bin/basha=$1b=$2echo a+b=$(($a+$b))echo a-b=$((a-b))echo a*b=$((a*b))echo a/b=$((a/b))echo a%b=$((a%b))[root@localhost test4]# ./1.sh 10 3a+b=13a-b=7a*b=30a/b=3a%b=1

方法二:

[root@localhost test4]# cat 1.1.sh 
#!/bin/bashread -p "please input two number:" a becho $a+$b=$(($a+$b))echo $a-$b=$((a-b))echo $a*$b=$((a*b))echo $a/$b=$((a/b))echo $a%$b=$((a%b))[root@localhost test4]# ./1.1.sh 
please input two number:3 43+4=73-4=-13*4=123/4=03%4=3

示例:截取字符串

[root@localhost ~]# str1="hello world"#返回变量长度
[root@localhost ~]# echo ${#str1}11#变量截取
#指定起始位置,一直到结束
[root@localhost ~]# echo ${str1:1}ello world#指定长度,不指定起始位置默认从开头开始
[root@localhost ~]# echo ${str1::3}hel#指定起始位置和长度
[root@localhost ~]# echo ${str1:1:3}ell#从右边第几个字符开始,及字符的个数
[root@localhost ~]# echo ${str1:0-1:1}d#输出右边的几个字符
[root@localhost ~]# echo ${str1:0-5}world[root@localhost ~]# echo ${str1: -5}world#提取完整字符串
[root@localhost ~]# echo ${str1:-5}hello world

示例:删除字符串

#获取后缀名tar.gz[root@localhost ~]# filename=testfile.tar.gz[root@localhost ~]# file=${filename#*.}[root@localhost ~]# echo $filetar.gz#获取后缀名.gz[root@localhost ~]# filename=testfile.tar.gz[root@localhost ~]# file=${filename##*.}[root@localhost ~]# echo $filegz#截取testfile.tar[root@localhost ~]# filename=testfile.tar.gz[root@localhost ~]# file=${filename%.*}[root@localhost ~]# echo $filetestfile.tar#截取testfile[root@localhost ~]# filename=testfile.tar.gz[root@localhost ~]# file=${filename%%.*}[root@localhost ~]# echo $filetestfile

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com