Chinaunix首页 | 论坛 | 博客
  • 博客访问: 327358
  • 博文数量: 82
  • 博客积分: 1530
  • 博客等级: 上尉
  • 技术积分: 771
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-16 03:44
文章分类

全部博文(82)

文章存档

2011年(6)

2010年(76)

我的朋友

分类: LINUX

2010-05-01 03:18:14

if结构语法如下:
if condition
then
    statements
[elif condition
    then statements .. ]
[else
    statements ]
fi

返回状态和返回:
每个UNIX命令,无论是什么语言,每当结束都对其调用程序(这里即为bash)返回一个整数值。这里称为退出状态。0通常为无措退出状态,1~255通常表示错误。

上一章的pushd函数,如果输入无效目录时会出错,下面是改进版
pushd ()
{
 dirname=$1
 id cd ${dirname:?"missing directory name."}
 then
    DIRSTACK="$dirname ${DIRSTACK:-$PWD' '}"
    echo $DIRSTACK
 else
    echo still in $PWD
 fi
}

cd执行成功就返回0,否则返回退出状态1。

用户通常依赖命令和标准UNIX使用程序返回适当的退出状态,但对自己的shell脚本和函数应该如何处理?加入一下编写来一个cd函数,覆盖了内置的cd命令。
假设在.bashrc中有下面的代码:
cd ()
{
    bultin cd "$@"
    echo "$OLDPWD --> $PWD"
}

builtin 命令告诉shell使用内置名字函数,不然会出现无限递归。
这里还介绍shell的一个特殊变脸$?,其值为运行的最后一个命令的退出状态。例如:
cd baddir
echo $?


返回:
语句return N使得包含它的函数以状态N结束,N实际上可选。return只能用在函数以及使用source执行的shell脚本。语句exit N将退出整个脚本,而不管其嵌套在函数内多少层。
cd ()
{
    builtin cd "$@"
    es=$?
    echo "$OLDPWD --> $PWD"
    return $es
}


组合退出状态:
允许使用&&和||
如:
if statement1 && statement2
if statement1 || statement2

条件测试:
if不仅可以检查命令是否运行正常。shell使用[]结构提供了测试各种条件的方式。
注意:“[”符号后"]"前的空格是必须的。。。。。。

字符串比较:
操作符如下:
str1 = str2 (注意:只有一个等号,和c++不一样)
str1 != str2
str1 > str2
str1 < str2
-n str1 (str1为非null)
-z str1 (str1为null)

下面是popd函数的改进:
popd ()
{
   if [ -n "$DIRSTACK" ]; then
       DIRSTACK=${DIRSTACK#* }
       cd ${DIRSTACK%% *}
       echo "$PWD"
   else
       echo "stack empty, still in $PWD"
   fi
}

文件属性检查:
文件属性操作符:
-d    (检查是否为目录)
-e    (是否存在)
-f    (是否为正规文件,即不是目录或者其他特殊类型)
-r    (读的权限)
-s    (文件存在且非空)
-w    (写权限)
-x    (执行权限)
-O    (文件所有者)
-G    (file的组ID匹配你的组ID)
file1 -nt file2  (file1比file2新)
file1 -ot file2  (file1比file2旧)

另外可以使用圆括号和斜线转义防止shell对其进行特殊处理将之分组或者使用没有介绍的两个逻辑操作符:
-a(AND)和-o(OR),进而实现条件操作的复杂逻辑表达式。
他们的作用类似&&和||,但只在test表达式内可用。

pushd ()
{
   dirname=$1
   if [ -n "$dirname" ] && [ \( -d "dirname" \) -a \( -x "$dirname" \) ]; then
       DIRSTACK="$dirname ${DIRSTACK:-$PWD' '}"
       cd $dirname
   else
       echo "still in $PWD"
   fi
}


整数条件:
算术测试操作符:
-lt  小于
-le  小于等于
-eq  等于
-ge  大于等于
-gt  大于
-ne  不等于
阅读(1041) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~