shell中的变量
常见的编程语言都有变量这一元素,变量通常用来保存一些数据或者方法,在shell里也有两种类型的变量:
1. 系统变量–Linux 自身创建并且维护的一组变量,变量名都是大写字母
2. 用户自定义变量(UDV) –用户自己定义的变量,小写字母
在bash中输入set
可以看到系统变量 ,如果太多的话可以 set | more
,意思是将set得到的内容用more 查看,下面是常见的一些系统变量:
系统变量 | 含义 |
---|---|
BASH=/bin/bash | shell名 |
BASH_VERSION=4.3.11(1)-release | shell版本 |
HOME=/home/wangsq | 当前用户主目录 |
COLUMNS=80 | 当前屏幕可以容纳的列数 |
LINES=30 | 当前屏幕可以容纳的行数 |
OSTYPE=linux-gun | 系统类型 |
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin | 系统路径,一般设置JDK时都会接触,路径之间用: 分割 |
一般输入echo $HOME
可以显示变量包含的内容:
而输入 echo HOME
:
只会显示HOME,所以要输出变量内容,要记住变量前的$
.
定义shell变量
一般这样定义:
variable name=value
value被赋值给变量名
例:
no=10 # ok
10=no #Error,变量名在左边
#定义username 为wangsq
username=wangsq
#定义color为red
color=red
变量名命名规则
shell变量定义通常以字母或者下划线开头,下面的都是合法的命名:
HOME
SYSTEM_VERSION
vech
_no
不要在定义时的=
两边加上空格,应该这样:
$ no=10
而不是:
$ no =10
$ no= 10
$ no = 10
shell中变量名也是区分大小写的,下面:
$ no=10
$ No=11
$ NO=20
$ nO=2
是不同的变量
如果这样定义变量 $vech=
或者 $vech=""
,那么执行echo $vech
时,输出就是什么都没有,这也是shell中定义NULL变量的方法。
最后一点需要注意的是,变量名中不要带*
,?
这样的字符,因为它们也是命令行中通配符的一部分,有可能带来不一样的结果。
使用变量
使用 $variablename
就可以打印或者访问shell变量了
通常我们使用echo
来打印shell变量
下面我们用一个例子来看shell中怎么使用变量的:
$ vi testscript
#
#Script to show how use variable
#
name=Jobs
os=OSX
echo "My name is $name"
echo "My OS is $os"
输出:
My name is Jobs
My OS is OSX
变量都被内容替代了。
输出变量
通常使用echo
显示变量的值
echo
的用法:
echo [options] [string, variable...]
options | 作用 |
---|---|
-n | 输出结果不新起一行 |
-e | 处理输出中包含的特殊字符 |
有些字符在程序语言中起到特殊的作用:
字符 | 含义 |
---|---|
\a | 响铃 |
\b | 退格 |
\c | 抑制换行 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
这些在学习C语言等其它语言也是一样的
例如我输出如下一句话:
$ echo -e "An apple a day keeps away \a\t\tdoctor\n"
最终显示是这样:
读变量
使用如下语法就可以读取变量:
read val1,val2
读取的值存储于变量中,通过在键盘输入数据,敲回车确认输入。
Eg:vi readname
echo "Please input your name:"
read usrname
echo "Hello usrname,this is your first read."
添加执行权限chomd 755 readname
,然后执行:./readname
,
当输入Jobs
, 回车输出Hello Jobs,this is your first read.