普通变量
注意事项:
变量名以英文字母或者下划线开头,但是不能以数字开头
变量名区分大小写
变量名与等号之间,等号与变量值之间不要有空格
使用$加变量名来使用变量的值
如果一行只有一条命令,则每一行不用以分号结尾,每一条命令以换行分隔
如果一行有多条命令,则每一条命令以分号分隔,但建议每行只有一条命令
#!/bin/bash #文件名:test.sh name="beyond" echo $name
执行脚本:
ubuntu@ubuntu:~$ ./test.sh beyond ubuntu@ubuntu:~$
有时候在使用变量的时候,变量名后面会跟着一些字符,如果这些字符与变量名之间没有间隔,那么,这些字符也将被认为是变量的一部分,即$nameHello,解释器回去找$nameHello,而不是找$name,可已使用两种方法,一种是使用空格分隔,另外一种使用花括号将变量名括起来(不要将$括起来)。如下例
#!/bin/bash #文件名:test.sh name="beyond" echo "one",$name echo "two",$nameHello echo "three",$name hello echo "four",${name}hell
执行脚本:
ubuntu@ubuntu:~$ ./test.sh one,beyond two, three,beyond hello four,beyondhell
从用户键盘读取数据并赋值给变量,使用:read [-p "提示信息"] 变量名
#!/bin/bash #文件名:test.sh #输出一段话,并等待用户输入,输入的内容赋值给后面的变量 read -p "please input your name:" name echo "welcome ${name}"
执行脚本:
ubuntu@ubuntu:~$ ./test.sh please input your name:beyond welcome beyond ubuntu@ubuntu:~$
单引号与双引号的区别:
转义字符在单引号和双引号中都不会转义,反引号的作用是将反引号括起来的命令(括起来的内容会被当成命令执行),然后将结果赋值给一个变量
#!/bin/bash #文件名:test.sh name="beyond" #双引号括起来的变量能解析 echo one,"$name" #双引号括起来的变量不能解析,会输出变量名 echo two,'$name' #转义字符在单引号和双引号中都不会转义 echo three,"$name\t hello" echo four,'$name\t hello' #echo `${name} \t hello` #上面这条命令会出错 str=`echo $name \t hello` echo $str str=`date` #date是在命令行中获取当前时间 echo "current time is $str"
执行脚本:
ubuntu@ubuntu:~$ ./test.sh one,beyond two,$name three,beyond\t hello four,$name\t hello beyond t hello current time is 2018年 01月 07日 星期日 18:50:59 CST
变量的删除使用unset 变量名
#!/bin/bash #文件名:test.sh name="beyond" echo one,"$name" //使用unset来删除变量 unset name echo $name
执行脚本:
ubuntu@ubuntu:~$ ./test.sh one,beyond ubuntu@ubuntu:~$
位置变量:
咱们平时使用ls 查看当前目录下的文件时,常常会带-l -a -i等参数,这些参数就是位置变量,使用这些的方法:用$加数字(0-9)来获取,如果数字大于9时,则会使用数字的最高位所代表的位置变量,然后这个位置变量会拼接上数字剩下的部分,所以说shell命令行最多可以传递9个参数(如果参数过多,可以将多个参数连接为一个参数来扩充),也可以使用${11}来获取第11个位置参数。
#!/bin/bash #文件名:test.sh echo $0 echo $1," ",$2," ",$3," ",$4," ",$5 echo $6," ",$7," ",$8," ",$9," ",$10 echo $11," ",$12
执行脚本:
ubuntu@ubuntu:~$ ./test.sh a b c d e f g h i j k ./test.sh a, ,b, ,c, ,d, ,e f, ,g, ,h, ,i, ,a0 a1, ,a2 ubuntu@ubuntu:~$
预定义变量:
预定义变量名 | 含义 |
$0或者${0} | 当前执行的进程名/脚本名/程序名 |
$#或者${#} | 命令行中位置参数的总数量 |
$*或者${*} | 所有位置参数的内容 |
$?或者${?} | 上一条命令执行的返回结果,0表示正常,1表示异常或出错 |
#!/bin/bash #文件名:test.sh echo "进程名:"$0 echo "位置参数的数量:"$# echo "所有位置参数的内容:"$* #执行一条非法语句,执行异常,返回非0 `echo "hello world"` echo "上一条命令的执行结果:"$? #执行一条合法语句,正常运行完毕,返回0 str=`echo "hello world"` echo "上一条命令的执行结果:"$?
执行脚本:
ubuntu@ubuntu:~$ ./test.sh a b c d e f g 进程名:./test.sh 位置参数的数量:7 所有位置参数的内容:a b c d e f g ./test.sh: line 8: hello: command not found 上一条命令的执行结果:127 上一条命令的执行结果:0 ubuntu@ubuntu:~$