经过了linux系统命令的学习之后,下一步就是不如shell编程的学习了,在此之前一些必要的准备工作还是不能少的,今天我们就来总结一下有关变量的相关知识
变量分了很多种,我们在此将其分为2类:用户自定义变量和环境变量
那么两者的区别在哪儿呢? 用户自定义变量,只能在当前的shell窗口使用,而环境变量可以在当前shell及其子shell下使用
知道了两者的区别,接下来我们就应该了解一下两者的定义和使用了
变量赋值:
格式:【变量名】=【变量值】 (此处不可加空格,变量值如果有空格,需要加双引号)
注:这个变量值为字符串类型,而不是整形或者浮点型
调用变量:echo $【变量名】 调用时需要加$,定义时不加$
变量叠加:
格式:x="$x"【新加的数】 或者 x=${x}【新加的数】 例如:x="$x"456 或者 x=${x}456 意思是,如果原来x=123,则现在x=123456
查看变量:set (所有变量) env (只能查看环境变量)
删除变量:unset 【变量名】 注意:这里变量名前面,不加$
以上是基本变量的定义和使用方式,而环境变量在此基础上稍做改变就可以了
环境变量的设置:
格式:export 【变量名】=【变量值】 或者 【变量名】=【变量值】 export 【变量名】
注:环境变量的删除和用户自定义的删除一样,但是如果在父shell中定义的,那么在子shell中则无法删除,必须在父shell中删除
以上这些变量的定义和设置都是临时的,也就是说如果电脑重新启动了,这些临时变量都会没有用了
接下来这部分的变量,可以说是shell编程里面的变量,我们称之为预定义变量:(意思是预先定义好的在脚本中运行的变量)
$n:表示预定义变量。$表示脚本本身,之后每一个【空格】之后表示下一个参数,如$1,$2等 例如: ./text.sh 11 22 则在脚本text.sh中$1将会被赋值为11,$2为22
当参数大于10以后,后面的规则为${【数字】} 例如: ${10}
在有预定义变量的shell脚本中,有一下的一些符号调用参数:
$*和$@都是将参数返回
$*:将所有的参数当做一个整体 即,如果进入循环则只循环一次(用双引号引入)
$@:则是将每个参数分别对待
$#:则用于统计参数个数
下面的这些调用方式,不仅仅可以在shell脚本中使用,也可以在命令行中直接使用,用于一些简单的命令判断(当然一般没必要用)
$? 如果上一条命令正确执行则返回0,如果上一个命令执行错误返回值非0(但是不确定,每一个错误的返回值是一样的)
$$ 返回当前进程的PID号
$! 返回后台运行的最后一个进程的PID号
基本的一些变量的知识就到此为止了,下面我们介绍2个相关的命令
read命令:shell脚本中的控制命令
格式:read【选项】【变量名】
常用参数:
-p:提示信息
-t:时间,以秒为单位,如果超时则不执行脚本
-s:输入内容不显示,即不会在命令行内显示刚刚输入的信息
-n:指定固定的字符数,如固定的一个字符或者两个字符
例如:read -t 30 -p "请输入性别:" -n 1 sex 意思是,30秒内输入一个字符表示你的性别
declare命令:用于声明变量类型
命令格式:
declare【+/-】【选项】【变量名】
-:给变量设定
+:给变量取消设定
常用选项:
-a:数组类型 例如:declare -a a[2]=abc 或者 a[2]=abc 都可以
注意:查看的时候需要输入${a[2]} 如果没有输入下标则默认为0,如果输入为*则输出全部数组内容
-i:整数形类型,即数值型 例如:declare -i a=1+2 则echo $a显示为3
-x:环境变量 类似与export,export实际上就是调用了declare命令
-r:只读变量 无法删除修改变量值,甚至删除和取消属性都不行
-p:显示变量类型
最后我们来说一个有趣的小文件
shell终端登录信息:/etc/issue
参数设置:
\d:显示当前系统日期
\s:显示操作系统名称
\l:显示登录的终端号
\m:显示硬件体系结构,如:i386、i686等
\n:显示主机名
\o:显示域名
\r:显示内核版本
\t:显示当前系统时间
\u:显示当前登录用户的序列号
注:如果是图形界面,则没有用,只能在纯命令行界面有用,且必须是本机终端,ssh登录是不行的
如果想在远程登陆上修改,可以修改/etc/issue.net文件,但是转义字符没有用,同时修改/etc/ssh/sshd_config文件中的Banner一行,修改为:Banner /etc/issue.net
当然还有简便的方法就是,修改
/etc/motd文件(默认可能是没有的)直接在这个文件中修改可以同时修改本机和ssh登录界面信息(建议使用)
这部分的内容有点杂,可以当做查阅手册观看,特别是变量那个部分有点不好理解,可以自己多试试,反正都是临时变量,大不了重新登录嘛。