(1) chmod -R 777 /driver/
参数: -R --recursive
change files and directories recursively
即将/driver目录中的所有文件及其子目录全部设置权限为777.
(2) [ -e /active/bin/boardrst ] && chmod 755 /active/bin/boardrst
预备知识: (1) test命令,用来测试文件属性,比较字符串及比较数字。
接受各种不同的参数,控制它要进行哪一种测试。
(2) 它产生的不是一般输出,而是可使用的退出状态。# echo $?
(3) test命令有另一种形式: [......],作用与test命令完全一样。
eg: if test "$str1" = "str2" | if [ "$str1" = "$str2" ]
then | then
...... | ......
fi | fi
---------------------------------------------------------
(4) test表达式:有一元表达式(unary)和二元表达式(binary)
-b file: file是块设备文件 | -c file: file是字符设备文件 | -d file: file是目录
-e file: file存在 | -f file: file是一般文件 | -p file: file是命名管道(FIFO)
-n string: string 是非NULL,或者说string字符串长度是否大于0,大于则为true.
eg:
【1】 if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
如果环境变量
BASH_ENV
的值不是空字符串,则把它的值当作启动脚本的文件名,
source
这个脚本。
【2】if [ -f ~/.bashrc ];
then
. ~/.bashrc
fi
这行脚本有三条命令,
if [ -f ~/.bashrc ]
是第一条,
then . ~/.bashrc
是第二条,
fi
是第三条。如果两条命令写在同一行则需要用;号隔开,一行只写一条命令就不需要写;号了,上面例子【1】有三条命令,都用;隔开了。
(5)参数之间要用空格隔开
eg:
[ $VAR -gt 3 ],$VAR
、-gt
、3
、]
是[
命令的四个参数,它们之间必须用空格隔开。
(6) :
是一个特殊的命令,称为空命令,该命令不做任何事,但Exit Status总是真。
eg:
if :; then echo "always true"; fi
输出:always true
------------------------------------------------------------------------
有了上面的基础,现在再看这行脚本就很easy了;首先,检查文件/active/bin/boardrst是否存在; 然后, 如果此文件存在,则将该文件的权限改为755.
(3) export BCEM_DRIVER_IF="/driver/interface"
export 命令可以将新变量添加到环境(environment)中, 环境是一个名称与值的简单列表,可供所有执行中的程序使用。这行脚本是把变量BCEM_DRIVER_IF添加到环境中,其值是/driver/interface目录。
(4) #mkdir /rmem && chmod 777 /rmem
#开头的行都是注释;因此不起任何作用。这行脚本本来是要新建目录rmem,然后将其权限设为777.但是有一个例外,就是
#!
(称为Shebang),它表示该脚本使用后面指定的解释器
/bin/sh
解释执行。
(5) DIR=`pwd`
这行脚本很简单,就是给变量DIR赋值为`pwd`。
一、要注意的就是``; 这个反单引号的意思就是执行这个命令。所以这行脚本的意思就是执行pwd命令,然后将输出的值赋给DIR这个变量。
二、关于变量,这里要注意,根据惯例,shell变量通常由全大写字母加下划线组成,有两种类型的Shell变量:环境变量和本地变量。
环境变量可以从父进程传给子进程,因此Shell进程的环境变量可以从当前Shell进程传给
fork
出来的子进程。用
printenv
命令可以显示当前Shell进程的环境变量。
而本地变量只存在于当前Shell进程,用
set
命令可以显示当前Shell进程中定义的所有变量(包括本地变量和环境变量)和函数。
三、等号两边都不能有空格,否则会被Shell解释成命令和命令行参数。
四、一个变量定义后仅存在于当前Shell进程,它是本地变量,用
export
命令可以把本地变量导出为环境变量,定义和导出环境变量通常可以一步完成,如(3)所示:export BCEM_DRIVER_IF="/driver/interface"。
五、如果一个变量叫做
VARNAME
,用
${VARNAME}
可以表示它的值,在不引起歧义的情况下也可以用
$VARNAME
表示它的值。
六、Shell变量的值都是字符串,比如我们定义
VAR=45
,其实
VAR
的值是字符串
45
而非整数。Shell变量不需要先定义后使用,如果对一个没有定义的变量取值,则值为空字符串。
七、作为一种好的Shell编程习惯,应该总是把变量取值放在双引号之中
eg:
[ -d Desktop -a $VAR = 'abc' ], 如果$VAR
变量事先没有定义,则被Shell展开为空字符串,会造成
测试条件的语法错误,(展开为[ -d Desktop -a = 'abc' ]
);
而如果把变量放在双引号中 [ -d Desktop -a "$VAR" = 'abc' ],则(展开为[ -d Desktop -a "" = 'abc' ]
)
这样就不会报错。
(6) source cpld_common.sh
source
或者
.
命令是Shell的内建命令,这种方式不会创建子Shell,而是直接在交互式Shell下逐行执行脚本中的命令。上面这行脚本就是直接在当前交互式shell下执行脚本cpld_common.sh。
(7)
START=$(($1))
END=$(($2))
LEN=$(($END-$START+1))
$(()) 用于算术计算,$(())
中的Shell变量取值将转换成整数,$(())
中只能用+-*/和()运算符,并且只能做整数运算。
例如:
[root@localhost shell]# VAR=45
[root@localhost shell]# echo $(($VAR+3))
48
|
(8) 双引号用于保持引号内所有字符的字面值(回车也不例外),但以下情况除外:
[root@localhost shell]# echo "\$"
$
[root@localhost shell]# echo "\'"
\
|
==============================================
阅读(1904) | 评论(0) | 转发(0) |