您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
马哥Linux运维学习笔记-变量与变量类型
发布时间:2018-04-30 10:07:43编辑:雪饮阅读()
为什么说按字符存储比按int存储占用的内存空间大?
以10为例,
若按字符存储,10是2个ascll码,而一个ascll码占用7个bit位,最高位恒为0,ascll码的范围是从0-127(对应的十进制),而计算机的最小存储单元是字节,而一个字节等于8个bit位.所以最终会占用16个bit位,浪费了两个bit位.
若按int来存储,10转换为2进制是1010,2进制就是按bit位来的,那么也就是说10相当于4个2进制位,即4个bit位,但由于计算机的最小存储单元是字节,所以最终按int来存储就相当于占用了一个字节,即8个bit位,虽然浪费了一个字节的4个位,但是节约了字符存储的8个位。
linux中的变量声明与调用
直接在命令行声明:xy=xxxx
直接在命令行调用:echo $xy
变量调用的时候还可以这样:echo {$xy}
linux中默认是在bash进程中的,若此时声明的变量,在子bash中是无法正常使用的。
默认bash,就是不用输入任何东西,直接声明变量,然后就可以直接调用。可是此时要是运行命令bash则会进入新的bash进程中(虽然命令行中看不出来),然后再次调用就调用不出来刚才父bash中声明的变量了,要向退出子bash,执行exit命令即可。
变量类型:
本地变量:set varname=value,set可以省略。作用域为整个bash进程
局部变量:local varname=value;作用域为当前代码段。
环境变量:export varname=value作用域为当前shell进程及其子进程。
环境变量也可以导出已存在的本地变量,即直接export varname
位置变量:
$1,$2....调用第一个位置变量,调用第二个位置变量,以此类推。这里说的位置是指在命令运行时候所传递的参数位置,如:
./test.sh 1111 222
该命令运行时传递了两个位置变量,而1111和222在test.sh这个脚本中就分别通过$1、$2来获取的。
特殊变量:
$?,直接echo $?则可获取上一个命令的执行状态返回值。
程序执行,可能有两类返回值:
(1)程序执行结果
(2)程序状态返回代码(0-255):
0:正确执行
1-255:错误执行,1,2,127系统预留。
id
id命令可以显示真实有效的用户ID(UID)和组ID(GID)
如 id root
输出重定向:
>覆盖重定向
>>追加重定向
2>错误重定向
2>>错误追加重定向
&>同时重定向(>只能将正常信息重定向,&>可以将正常信息和错误信息都重定向)
输出重定向的特殊位置:
/dev/null:是一个软件设备,是一个空设备,被称为数据黑洞。
撤销变量:
无论是环境变量还是本地变量,都可以被撤销。由于某些进程并没有结束,但是我们的需求已经完成了,这时候变量可能会遗留。另外环境变量即使在每个子进程都结束后仍然存在,所以有时候我们需要手动撤销变量。
unset varname
查看当前bash中有哪些变量
执行set命令即可查看
查看当前shell中的环境变量有哪些
直接执行printenv或env或export都可以
linux中变量连接不需要连接符,直接就可以拼接
如:
animals=dog
animals=$animals,cat
echo $animals
结果是"dog,cat"
但是直接拼接的话第一个拼接字符只能是"-",":",","等特殊字符
环境变量的拼接:
比如像原环境变量PATH中添加“:/usr/local/nginx/sbin”
export PATH=$PATH:/usr/local/nginx/sbin
shell默认变量类型都是字符串型的,不能进行算术运算:
a=2;
b=3;
c=$a+$b;
echo $c
结果是"2+3"
file:
file命令用来探测给定文件的类型。
如file /bin/ls
执行结果:
第一个字段是文件类型,值如ELF表示该文件是可以执行可以连接的文件
which:
which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
一般用来查看某个命令的执行路径
编写一个脚本
每个脚本在开头都需要声明shebang(魔术)
shebang的格式是#!开头,然后紧跟着你的脚本解释器的路径
shebang声明完毕以后的每行中若有#,则代表该行被注释
脚本后缀一般是.sh声明
写完脚本后要给脚本添加执行权限,使用chmod +x filename即可。
脚本的执行
一般如果没有给某个命令执行路径,则默认会去环境变量的PATH中去寻找该命令执行路径并执行。
那么脚本也一样,所以脚本的执行由于是自己写的,要想和系统命令那样不带路径就能执行则需要在环境变量中追加该脚本的执行路径,否则就只能自己执行时补全路径才可以。
如果编写的脚本直接没有后缀名,则和系统中的命令就一模一样了,连后缀名都可以不用输入。
另外如果一个脚本没有执行权限,那么也可以通过解释器直接执行,如:
假如有一个cs无后缀的脚本并且其路径加入了环境变量PATH,那么
先去除其权限
chmod -x cs
此时直接执行cs则执行不了
但是这样执行就可以
bash cs
关键字词:linux,变量