shell编程之变量
admin
2023-02-26 06:01:01
0

shell编程之变量

前言

  1. 什么是shell变量?
  2. 为什么需要shell变量?
  3. 如何定义shell变量?

本文主要带你了解shell变量的相关概念、shell变量的使用与作用等基础知识,适合初学者学习,了解。

一、shell变量的概念

​ 各种shell环境中都属于到了“变量”的概念。shell变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而变化。通过使用变量,shell程序可以提供更加灵活的功能,适应性更强。

​ 常见的shell变量的类型包括自定义变量、环境变量、位置变量、预定义变量。

1、自定义变量

​ 系统用户自己定义,只在自己的shell环境中有效。

下面通过实例来解释如何定义新的变量,如何查看和引用变量以及变量赋值的特殊操作。

[root@localhost shell]# Value=tome
[root@localhost shell]# Version=6.0
[root@localhost shell]# echo $V
$Value    $Version  
[root@localhost shell]# echo $Value 
tome
[root@localhost shell]# echo $Version 
6.0
[root@localhost shell]# echo $Version4.5
.5
[root@localhost shell]# echo ${Version}4.5
6.04.5
//以上是变量定义与查看操作
//下面是变量赋值特殊操作
[root@localhost shell]# vlan=vlan 5.0
bash: 5.0: 未找到命令...
[root@localhost shell]# vlan="vlan 5.0"    //双引号
[root@localhost shell]# echo $vlan 
vlan 5.0
[root@localhost shell]# ss=8.8
[root@localhost shell]# qq="QQ $ss"
[root@localhost shell]# echo $qq
QQ 8.8
[root@localhost shell]# qq='QQ $ss'   //单引号
[root@localhost shell]# echo $qq
QQ $ss
[root@localhost shell]# ls -lh `which useradd`  //反撇号(esc下方按键)
-rwxr-x---. 1 root root 116K 11月  6 2016 /sbin/useradd

[root@localhost shell]# read hehe    //从键盘输入
123
[root@localhost shell]# echo $hehe 
123

设置变量的作用范围,export设置全局变量,bash可以进入子shell中。

[root@localhost shell]# echo $hehe  
123
[root@localhost shell]# bash         //进入子shell中
[root@localhost shell]# echo $hehe   //无法调用父shell变量

[root@localhost shell]# exit       //返回父shell中
exit
[root@localhost shell]# echo $hehe 
123
[root@localhost shell]# export hehe   //定义全局
[root@localhost shell]# bash
[root@localhost shell]# echo $hehe
123

下面来介绍一下数值变量的运算

shell变量的数值运算多用于脚本程序的过程控制(如循环次数、使用量比较等)。在Bash Shell环境中,只能进行简单的整数运算,不支持小数运算。

(1)加法运算:+
(2)减法运算:-
(3)乘法运算:*(需要转义)
(4)除法运算:/
(5)求模(取余)运算:%

运算实例:

[root@localhost shell]# X=36
[root@localhost shell]# Y=33
[root@localhost shell]# expr $X + $Y
69
[root@localhost shell]# expr $X - $Y
3
[root@localhost shell]# expr $X \* $Y
1188
[root@localhost shell]# expr $X / $Y
1
[root@localhost shell]# expr $X %  $Y
3

2.特殊变量

(1)环境变量——可以修改

[root@localhost shell]# env
XDG_SESSION_ID=11
HOSTNAME=localhost.localdomain
TERM=xterm
SHELL=/bin/bash
HISTSIZE=1000
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
MAIL=/var/spool/mail/root
PWD=/root/shell
LANG=zh_CN.UTF-8
HISTCONTROL=ignoredups
HOME=/root
SHLVL=2
LOGNAME=root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share/:/var/lib/flatpak/exports/share/:/usr/local/share/:/usr/share/
LESSOPEN=||/usr/bin/lesspipe.sh %s
hehe=123
XDG_RUNTIME_DIR=/run/user/0
_=/bin/env
[root@localhost shell]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

(2)位置变量 ——为程提供操作参数。使用$n(n范围(1~9))

[root@localhost shell]# vim add2.sh
[root@localhost shell]# cat add2.sh 
#!/bin/bash
sum=`expr $1 + $2`
echo "$1 + $2 = $sum"
echo $sum
[root@localhost shell]# ./add2.sh 2 3
2 + 3 = 5
5

(3)预定义变量——只能使用无法更改的变量

$#——命令行中位置参数的个数

$*——所有位置参数的内容

$?——前一条命令执行后的状态,返回0表示正确,反之错误。

$0——脚本名称

相关内容

热门资讯

意大利向印尼赠送退役航母,一场... 澎湃新闻特约撰稿 林森据环球时报4月30日援引外媒报道,意大利议会4月28日批准政府的一项计划,将退...
特朗普:即便油价涨到200美元... 伊朗战争爆发搅乱全球能源供应,油价高涨,美国国内许多人苦不堪言。但是美国总统特朗普说,即便油价涨到2...
泽连斯基称乌方将“对等”回应俄... 新华社基辅5月6日电(记者李东旭) 乌克兰总统泽连斯基6日晚在社交媒体发文称,自6日凌晨以来,俄方以...
人民日报刊文:扫码用餐 吃得“... 河南信阳推进公务接待改革扫码用餐 吃得“明白”(厉行节约 反对浪费)本报记者 王乐文 毕京津《人民日...
活动回顾:心灵律动·刚柔共生 心灵律动 - 活动回顾 - “五一”期间, 东莞市工人文化宫连续举办了两场 “心灵律动·刚柔共生”心...
商业航天政策利好 全国首个卫星... 来源:21世纪经济报道 21世纪经济报道记者周慧 5月6日,工业和信息化部官网消息称,工业和信息化部...
伊朗确认前往美国参加世界杯:将... 当地时间5月6日,伊朗国家足球队主教练在接受采访时表示,伊朗国家足球队将于美加墨世界杯开始前14天抵...
雷达、机库、营房、燃料库、飞机... 据《华盛顿邮报》5月6日报道,通过卫星影像分析发现,自2月28日战事爆发以来,伊朗空袭已在中东美军军...
从买买买到租租租,“租用一代”... “五一”假期还在路上,年轻人已经“租”起来了。 “租三天,不到300块钱。”五一放假前一周,清清已给...
【品牌】摩托罗拉大折叠屏新机定... 此前联想预热将于5月19日19点举行联想天禧AI一体多端全场景新品超能之夜活动,届时将带来多款新品,...