Shell-Bash变量与运算符
admin
2023-08-15 23:45:28
0次

1、Bash中变量定义的规则 说明:

  • 变量名称,有字母,数字和下划线组成,但是不能以数字开头
  • 在 Bash 中变量的默认类型是字符串类型,如果需要定义数值类型需要特殊声明
  • 变量定义使用等号连接,等号左右两边不能有空格
  • 变量的值如果有空格,需要使用单引号或者双引号包括起来。
  • 使用$变量名 或者 ${变量名} 可以进行变量值的叠加
  • 将命令的结果复制给变量,需要使用反引号,或者$()包含命令
  • 环境变量建议大写
样例:
命令复制给变量: curDate=$(date) echo curDate

2、变量的分类 (1)说明:
  • 用户自定义变量: 由用户自由定义变量名和变量值,
  • 环境变量:环境变量分为系统环境变量和用户环境变量。其中系统环境变量不允许修改变量名称和变量作用,允许修改变量内容。而用户环境变量是允许修改的。
  • 位置参数变量: 用来向脚本中传递参数或数据,变量名不能自定义,变量作用也是固定的,但是变量内容是自定义的。
  • 预定义变量: Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
(2)样例:
用户自定义变量: variableTest='test value'

(3) 变量比较
变量类型 名称 作用 内容
用户自定义变量 允许自定义 允许自定义 允许自定义
环境变量 禁止自定义 禁止自定义 允许自定义
位置参数变量 禁止自定义 禁止自定义 允许自定义
预定义变量 禁止自定义 禁止自定义 允许自定义
3、用户自定义变量 (1)变量的定义
varName='varContent'# 注意左右两边不能有空格

(2) 调用变量
echo $varName

(3) 变量查看 set命令说明:
set[选项] 选项: -u: 设定此项后,调用未声明的变量会报错。重启会失效。在未设置的情况下,Bash 自身无法区分空变量和未定义变量. -x: 设定此项之后,在命令执行之前会先把命令输出一次。

(4) 变量删除 unset 命令说明:
unset[选项] 选项: -f: 仅删除函数。 -v: 仅删除变量。

unset 样例:
lh="ls -lh"#定义变量 $lh # 使用变量 unset -v lh#删除变量

4、环境变量 (1)环境变量设置: export命令说明:
  • export 可新增,修改或删除环境变量,供后续执行的程序使用。export 的效力仅限于该次登陆操作。
export命令语法:
export [选项] [变量名称]=[变量设置值] [选项]: -f代表[变量名称]中为函数名称。 -n删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。 -p列出所有的shell赋予程序的环境变量。

export命令样例:
export varName="varcontent"# 使用 export 声明环境变量

(2)环境变量查看 env命令说明:
  • env命令用于显示系统中已存在的环境变量,以及在定义的环境中执行指令。该命令只使用"-"作为参数选项时,隐藏了选项"-i"的功能。
  • 若没有设置任何选项和参数时,则直接显示当前的环境变量。
env命令语法:
env [选项] [参数] [选项]: -i:开始一个新的空的环境; -u;<变量名>:从当前环境中删除指定的变量。 [参数]: 变量定义:定义在新的环境中变量,定义多个变量定义用空格隔开。格式为“变量名=值”; 指定:指定要执行的指令和参数。

env命令样例:
[命令]: env | egrep -i "HOME"#查询系统变量中USER和HOME [结果]: PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Volumes/Document/apache-maven-3.3.9/bin::/Users/luoqing/.rvm/bin JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home M2_HOME=/Volumes/Document/apache-maven-3.3.9 HOME=/Users/luoqing JAVA_7_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home JAVA_8_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home

(3)系统自带环境变量 PATH:系统查找命令的路径 样例:
echo $PSTH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/luoqing/.rvm/bin

自定义脚本执行:
  • 将脚本复制到 PATH 中的某个目录下: cp ./shell.sh /usr/local/bin
  • 将脚本路径添加到系统环境变量中: PATH=${PATH}:/Users/luoqing/test/
PS1:命令提示符设置 样例:
echo $PS1 [\u@\h \w]\$#

LANG:定义Linux系统的主语系环境 样例:
[命令]: echo $LANG [结果]: zh_CN.UTF-8

5、位置参数变量 说明:
位置参数变量 作用说明
$n n 为数字,9分别代码第一到第九个参数,10 以上的参数需要用${n}
$* $*会把所有的参数看作是一个整体
$@ 该变量代表命令行中的所有参数,区别在于$@会把每个参数区别对待
&# 该变量代表命令行中所有参数的个数
样例:
[脚本]: #!/bin/bash echo "验证结果:" echo "=======验证\$n=======" varA=$1 varB=$2 sum=$(($varA+$varB)) echo $sum echo $0 echo "=======验证$@======" echo "\$@ is $@" for i in "$@" do echo $i done echo "======验证$*======" echo "\$* is &*" for j in "$*" do echo $j done echo "\$* is $*" echo "=====验证\$#====" echo "\&# is $#"[结果]: =======验证$n======= 3 ./count.sh =======验证1 2 3 4 5====== $@ is 1 2 3 4 5 1 2 3 4 5 ======验证1 2 3 4 5====== $* is &* 1 2 3 4 5 $* is 1 2 3 4 5 =====验证$#==== \&# is 5

6、预定义变量 说明:
预定义变量 作用
$? 最后一次 执行的命令返回的状态 ,如果这个变量的值为0,证明上一个命令正确结束。非0则命令执行异常。
$$ 当前进程的进程号
$! 后台运行的最后一个进程的进程号
样例:
[脚本]: #!/bin/bash echo "======验证预定义变量====" echo "===\$?===" pwd num=$? echo $num echo "===\$$===" echo "\$\$ is $$"echo "===\$!===" echo "\$! is $!"[结果]: ======验证预定义变量==== ===$?=== /Users/luoqing/Desktop/shellFile 0 ===$$=== $$ is 5562 ===$!=== $! is

7、接收键盘输入 命令:
read [选项] [变量名] [选项]: -p:指定读取值时的提示符; -t:指定读取值时等待的时间(秒)。 [变量名]: 指定读取值的变量名。

样例:
[命令]: #!/bin/bash echo "====read demo start...====" read -t 30 -p "please input var A:" varA read -t 30 -p "please input var B:" varB sum=$(($varA + varB)) echo "result is :"$sum [结果]: ====read demo start...==== please input var A:12 please input var B:12 result is :24

8、shell的运算符 (1) 数值运算的方法 declare 命令 说明:
  • declare命令用于声明和显示已存在的shell变量。当不提供变量名参数时显示所有shell变量。declare命令若不带任何参数选项,则会显示所有shell变量及其值。
  • declare的功能与typeset命令的功能是相同的。
语法:
declare [选项] [参数] [选项]: +/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性; -f:仅显示函数; -a: 将变量声明为数组类型 -i:将变量声明为整数型 -r:将变量设置为只读; -x:指定的变量会成为环境变量,可供shell以外的程序来使用; [参数]: shell变量:声明的shell变量,格式为“变量名=值”。

样例:
[脚本]: #!/bin/bash echo "====declare start...====" varA=11 varB=22 sum=$varA+$varB echo "===未使用declear is: "$sum declare -i sumDeclare=$varA+$varB echo "===使用declear is: "$sumDeclare [结果]: ====declare start...==== ===未使用declear is: 11+22 ===使用declear is: 33

expr 命令:数据运算工具 说明:
  • expr命令是一款表达式计算工具,使用它完成表达式的求值操作。
    语法:
expr [选项] [参数] [选项]: --help:显示指令的帮助信息; --version:显示指令版本信息。 [参数]: 需要计算的表达式

样例:
[脚本]: #!/bin/bash echo "====expr start...====" num1=12 num2=13 # expr 运算符左右两侧必须要有空格 sum=$(expr $num1 + $num2) echo "result:"$sum [结果]: ====expr start...==== result:25

let命令 说明:
  • let命令是bash中用于计算的工具,提供常用运算符还提供了方幂**运算符
  • 在变量的房屋计算中不需要加上$来表示变量,如果表达式的值是非0,那么返回的状态值是0;否则,返回的状态值是1
语法:
let arg [arg ...]#arg代表运算式

样例:
[脚本]: #!/bin/bash echo "====let start...====" varA=12 varB=13 let sum=$varA+$varB echo "result:"$sum [结果]: ====let start...==== result:25

推荐:$(()) 样例:
[脚本]: #!/bin/bash echo "====let start...====" varA=1 varB=3 sum=$(($varA+$varB)) echo "result:"$sum [结果]: ====let start...==== result:4

(2)运算符及优先级
优先级 运算符 说明
1 = += 赋值运算
2 || 逻辑或
3 && 逻辑与
4 | 按位或
5 ^ 按位异或
6 & 按位与
7 == != 等于,不等于
8 < > <= >= 比较运算符
9 << >> 按位左移,右移
10 + - 加减运算
11 * / \ 乘 除 取模
12 ! ~ 逻辑非,补码
13 + - 正 负
9、变量测试 语法:

Shell-Bash变量与运算符
文章图片
变量测试规则
样例: 【Shell-Bash变量与运算符】
[脚本]: #!/bin/bash echo "====let start...====" result=${testA-noDefine} echo "result:"$result [结果]: ====let start...==== result:noDefine

相关内容

热门资讯

大浪淘金APP黑幕揭秘:内盘操...   大浪淘金APP平台最隐蔽的黑幕,在于其完全封闭的内盘交易系统。这个看似与国际市场接轨的交易平台,...
告别固定工资实现财富自由?一品...   普通投资者被广告宣传诱导,注册就送现金,充值返现金券等等这些宣传方式,都是在引流到平台开户,不怕...
哈易购APP打着现货交易幌子搞...   网络上各类白银、铂金等贵金属投资广告铺天盖地,不少平台以"现货交易"为名,暗中却从事着非法期货交...
5元起投!高额收益?中国白银、...   上海华通白银国际交易中心有限公司(以下简称“华通白银国际”)打着“白银、铂金现货订购”的旗号,实...
"九州订购APP、起...   近年来,贵金属投资热度持续攀升,但乱象也随之而来。一些不法分子趁机搭建虚假交易平台,打着"低门槛...
坚锅淘金APP投资者频繁爆仓亏...   坚锅淘金APP对外宣称是贵金属现货交易平台,日常出入金看似畅通无阻,给人一种合规运营的假象。但事...
斗金订购APP“5元订购现货”...   斗金订购APP“5元订购现货”骗局揭秘:充值易、回本难,越陷越深!  许多投资人在未核实平台合规...
贵金属APP乱象曝光:&quo...   当前市场上部分贵金属类APP未取得正规交易资质,涉嫌误导消费者参与白银、铂金等商品的非合规交易!...
华通白银、银宝街APP被指虚假...   警惕现货白银投资陷阱:上海华通白银背后的平台涉嫌非法期货交易  近年来,各类现货白银交易平台以“...
充值送300,月入过万?别被量...   如今,网络上充斥着大量未经批准的贵金属及其他产品订购交易平台。这些平台普遍缺乏合法经营资质,却将...
鑫汇智投APP贵金属非法期货、...   鑫汇智投APP贵金属非法期货、人为控盘,大量投资者遭恶意收割  鑫汇智投APP长期以“低门槛、高...
矅光智策APP非法贵金属交易骗...   不少投资人在矅光智策APP上进行贵金属交易后出现了严重亏损。许多人在下载该平台时,根本不清楚其是...
飞鸽订购APP非法期货交易骗局...   飞鸽订购APP非法期货交易骗局,很多投资者根本没搞懂规则就盲目充值,买涨买跌跟买cai票一样!平...
天龙白银APP被操控的非法期货...   中小投资者在网络平台参与商品现货订购交易,表面看似合规合法,实则暗藏诸多难以察觉的风险。商品现货...
下载送试玩金?千万别碰!带你揭...   当前,许多贵金属APP交易平台正采用欺诈性营销手段。它们通过抖音等短视频平台,以“5元起投”“充...
泡泡淘金APP骗局:打着&qu...   泡泡淘金APP骗局:打着"商品订购"幌子,实则非法期货收割投资者!投资需谨慎,切勿轻信“高额回报...
南商云购APP虚假电子盘背后的...   南商云购是虚假电子盘吗?它是否具备合规的交易资质?这个曾经的"现货电子盘"如今摇身一变,披上了"...
警惕"祥龙订购&qu...   祥龙订购APP、掌上银牛APP等平台背后的运营方——四川禄宏商品现货市场有限公司,仅具备现货交易...
中国白银、华银:虚假宣传、后台...   中国白银APP宣称是上市公司“中国白银集团”与“上海华通白银国际交易中心”旗下的现货交易平台,提...
起底“优品订购”APP非法期货...   “优品订购”APP根本不具备任何合法的交易资质。其背后的运营方仅凭随便注册一家公司、开发一款交易...