嵌入式成长轨迹5 【嵌入式环境及基础】【嵌入式Linux软件开发入门】【变量和运算符】
一、变量
1、本地变量:在用户现在的shell生命周期的脚本中使用
variable_name = "xxx"
set可以展示出现在所有的本地变量
readonly variable_name 标明是只读变量(可以先赋值再标注)
2、环境变量:用于所有用户进程(经常称为子进程)
cat /etc/prof 查看所有环境变量
export name="" 设置环境变量
也可表明为只读变量
3、变量替换
echo ${variable_name}用变量的值替换它的名字(大括号可省)
如echo $testvar
echo ${variable_name:+value}如果设置了variable,则显示value,否则,为空
echo ${variable_name:?value}如果未设置则显示用户定义的错误信息(这样的信息与别的信息有区别)value
echo ${variable_name:-value}如果未设置则显示为value
echo ${variable_name:=value}如果未设置则修改其值并显示为value
#echo ${testvar:+"xidian"}
xidian
#echo ${testvar1:+"xidian"}
为空
#echo ${testvar1:?"no defined"}
bash:testvar1:no defined
#echo ${testvar1:-"xidian"}
#echo ${testvar:-"xidian"}
xidian
#echo ${testvar:="xidian"}
this is a test
#echo ${testvar2:="xidain"}
xidian
#echo $testvar2
xidian
4、变量清除
unset variable_name
只读变量不能清除
#echo $testvar
this is a test
#unset testvar
#echo $testvar
空
#echo $testvar2
#readonly testvar2
#unset testvar2
5、位置变量
位置变量表示$0,$1,...,$9
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9
脚本名 A B C D E F
1)向脚本中使用位置变量参数
2)向系统命令传递参数
位置变量 1)向脚本中使用位置变量参数
1 #!/bin/bash
2 #parm
3
4 echo $0
5 echo $1
6 echo $2
7 echo $3
8 echo $4
9 echo $5
10 echo $6
11 echo $7
12 echo $8
13 echo $9
[root@localhost ~]# vi parm.sh
[root@localhost ~]# chmod a+x parm.sh
[root@localhost ~]# ./parm.sh
./parm.sh
[root@localhost ~]# ./parm.sh a b c d e f g h i j k l
./parm.sh
a
b
c
d
e
f
g
h
i
2)向系统命令传递参数
1 #!/bin/bash
2 #parm2.sh
3 find /root -name $1 -print
[root@localhost ~]# vi parm2.sh
[root@localhost ~]# chmod a+x parm2.sh
[root@localhost ~]# ls
anaconda-ks.cfg install.log.syslog testfile.dat 模板 图片 下载 桌面
install.log parm2.sh 公共的 视频 文档 音乐
[root@localhost ~]# ./parm2.sh testfile.dat
/root/testfile.dat
6、标准变量
bash默认建立了一些标准环境变量,可在/etc.profile中定义
EXINIT 初始化使用
HOME 安装路径
IFS 标准变量中用什么值来分割
LOGNAME 显示用户名
MAIL 显示邮件目录
MAILCHECK 每隔多少秒检查邮件
MAILPATH mail存储在那个文件中
TERM 终端类型
PATH 命令寻找路径
TZ 时区
PS1 终端命令左端显示的字符串[root@chinaitlab shell]
PS2 一行多个命令时的标识
EDITOR 提示是否有新邮件以及邮件的目录
PWD 显示当前目录
SHELL 当前运行的SHELL
MANPATH 帮助文档的目录
TERMINFO 终端类型的帮助记录信息
7 特殊变量
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数,可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@ 返回参数列表。使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表示有错误
8 影响变量的命令
declare
设置或显示变量
-f只显示函数名
-r创建只读变量(这个不能颠倒)
-x创建环境变量
-i创建整数变量
使用+替代-,可以颠倒选项的含义
export
用于创建传给子shell的变量
--表明选项结束,所有后续参数的实参
-f表明在名-值对中的名字是函数名
-n把全局变量转换成局部变量。命令的变量不再传给shell
-p显示全局变量列表
readonly
用于显示或设置只读变量
--表示选项结束
-f创建只读变量
set
设置和重设各种shell
shift[n]
用于移动位置变量,调整位置变量,n指明移动位数。如移动1位使$3赋给$2,$2赋给$1
typeset
用于显示或设置变量
是declare的同义词
unset
用于取消变量定义
--表明选项结束
-f删除只读变量,但不能删除Shell环境中指定的变量和函数,如PATH等设置
#清除
[root@localhost ~]# echo ${var1:-"haha"}
haha
[root@localhost ~]# echo $var1
[root@localhost ~]# echo ${var1:="haha"}
haha
[root@localhost ~]# echo $var1
haha
[root@localhost ~]# unset var1
[root@localhost ~]# echo $var1
#不能清除只读变量
[root@localhost ~]# var="a"
[root@localhost ~]# echo $var
a
[root@localhost ~]# readonly var
[root@localhost ~]# unset var
bash: unset: var: cannot unset: readonly variable
二、引号
变量和替换操作,在脚本中执行变量替换时最容易犯的一个错误就是引用错误
1、双引号
使用双引号可引用除字符$、`、\外的任意字符或字符串
2、单引号
与双引号类似,不同的是shell会忽略任何引用值。里面所有字符包括引号都作为一个字符串
3、反引号
用于设置系统命令的输出到变量。shell将反引号中的内容作为一个系统命令,并执行其内容
4、反斜杠
如果一个字符有特殊含义,前面加上反斜杠之后可以屏蔽
如\& \* \+ \^ \$ \' \" \| \?
三、运算符
运算符是对计算机发的指令
运算对象
-数字、字符
-变量
-表达式:运算符和运算对象的组合体
一、类型
1、按位运算符
~ << >> & | ^(异或)
$[ ] 表示要求shell对括号中的表达式求值(括号中间要有空格隔开)
2、逻辑运算符
&& ||
3、赋值运算符
= += -= *= /= %= &= ^= |= <<= >>=
let $count = $count + $change
let $count += $change
二、表达式替换
$[ ] 大致等于 $(())
$[ ] 可以接受不同基数的数字
[ base#n ] n表示基数从2到36的任何基数
如
echo $[ 10#8+1 ]
9
三、运算符的优先级
基本其他语言相同
如果不清楚可以使用括号