标签:fail 读取 定义变量 hid ade script class ++ 避免
#
作为注释,使用方法和c中的//
完全相同;
在同一行执行两句命令,如ls ; pwd
变量主要分为全局环境变量和私有变量(即局部环境变量),有关环境变量,详见 Linux环境变量详解
test=123 #局部环境变量一般用小写
export TEST=123 #全局环境变量一般用大写
export MYNAME=‘XIAO BA WU‘ #变量值有空格,要用单引号围起来
export test #也可以这样把前面的局部变量导出到全局
此外,和c语言一样,变量必须先定义再使用。若使用了一个未定义的变量,倒是不会报错,相当于调用了一个值为空的变量
shell中,不能直接由变量名获取变量值,根本原因是shell中的字符串可以不加引号,所以系统无法判断它是字符串还是变量名,故通过$
来引用变量名获取其值。而当变量名作为右值时,系统可以直接判定其为变量,无需添加$
value1=value2 //value1的值为字符串"value2"
value1=$value2 //value1的值为value2的值
name=123
name1=456
echo hah! hah! $name1 #打印name1的值
echo hah! hah! $name11 #打印name11的值(空值)
echo hah! hah! ${name}11 #打印name的值
name=‘aa bb cc d‘
name=$name‘d ee‘
$
在shell中是关键字,如果要在字符串中单纯显示$
符号,必须加\
。
shell中,我们可以使用反引号` (就是键盘上~所处的键),来将命令的返回值赋给变量,如:
PATH=`pwd`
echo abc123 #一般情况下直接打印
echo "let‘s go" #字符串里单引号,则用双引号包裹
echo ‘he says "shell is easy"‘ #字符串里双引号,则用单引号包裹
echo -n
>
(覆盖写) 或>>
(追加写)pwd > /home/root/path.txt #把pwd指令的返回值覆盖写入文件
echo $i >> /home/root/log.txt #把某个变量值追加写入文件
<
或<<
。说实话输入重定向用的很少,主要是命令可以直接以文件名作为参数,何必重定向呢。。。。当脚本最后一句命令执行完,就会自动退出
$?
来获取上条执行命令的返回值exit var
,var可以是我们指定的脚本退出时的返回值管道的功能是:将一条命令的返回值,作为另一条命令的参数
command1 | command2 | command3
由于shell中的变量有可能是字符串或整形,所以运算起来很蛋疼
var1=1
var2=2
var=`expr $var1 \* $var2`
var1=1
var2=2
var=$[$var1 * $var2]
var1=1
var2=3
var=`echo "scale=4; $var1 / $var2" | bc`
if commandA
then
command1
command2
fi
#另一种风格的写法
if commandA; then
command1
command2
fi
if commandA
then
command1
else
command2
fi
if commandA
then
command1
elif commanB
then
command2
elif commandC
then
command3
fi
case $USR in
root)
echo root
echo oh!;;
jack)
echo jack;;
peter | ben) #满足jack或ben
echo hah! hah!;;
*) #星号代表默认情况
echo error;;
esac
if test condition
then
commands
fi
#bash支持的另一种格式,本质也是调用了test,千万要注意在condition和方括号之间加空格
if [ condition ]
then
commands
fi
var1 参数 var2
,如下,具体参数有很多,可以上网查if [ $var1 -eq $var2 ] #判断var1和var2变量值是否相等
if [ $var1 -gt 2 ] #判断var1的变量值是否大于2
var1 符号 var2
,此外还可以使用[[ ]]
来使用正则匹配if [ $string1 = $string2 ] #判断变量string1和string2值是否相等
if [ $USR = !root ] #判断变量USR值是否不等于root
if [[ $USR == r* ]] #判断变量USR值是否以字母r开头
参数 filepath
如下,具体参数有很多,可以上网查if [ -d $MYPATH ] #判断位于$MYPATH的文件是否存在,并且是个目录
if [ -e $MYPATH ] #判断位于$MYPATH的文件是否存在
if [ -r $MYPATH ] #判断位于$MYPATH的文件是否可读
if [ -x $MYPATH ] #判断位于$MYPATH的文件是否可执行
if [ -z "$USR" ] #判断变量USR长度是否为零
if [ -n "$USR" ] #判断变量USR长度是否非零
&&
和||
来表示,尤其需要注意的是,shell中以命令返回0为真,1位假,故&&
和||
操作以逻辑真假为准,不再以数值上的0和1为准if [ condition1 ] && [ condition2 ]
if [ condition1 ] || [ condition2 ]
[ $? -ne 0 ] && mk_error "build rootfs Failed" && return 1
#for语句假定列表元素之间以空格分割,若元素内部包含空格,则用双引号包围即可
for var in shanghai beijing "new york" guangzhou
do
commands
done
#for语句也可以将变量的内容作为列表值
list=‘shanghai beijing guangzhou‘
for var in $list
do
commands
done
#列表值的来源也可以是指令的输出,for将以空格来分割指令的输出,当输出结束时循环也结束
for var in `cat $file` #此处从一个文件中读取内容,以此作为列表值
do
commands
done
OLDIFS=$IFS #先备份原本的IFS值
IFS=$‘\n:;‘ #指定分隔符为换行符、冒号、分号
#这里可以进行各种操作了
IFS=$OLDIFS #还原IFS值
#这里将会遍历所有满足条件的目录,并将其作为列表值,每次循环赋给变量file
for file in /home/root/.b* /home/root/test
do
if [ -d $file ]
.....
标签:fail 读取 定义变量 hid ade script class ++ 避免
原文地址:http://blog.csdn.net/qq_28992301/article/details/53575055