Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239316
  • 博文数量: 91
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 955
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-12 09:38
文章分类

全部博文(91)

文章存档

2017年(1)

2011年(1)

2008年(15)

2007年(74)

我的朋友

分类: LINUX

2007-08-25 15:54:10

Frequently Asked Question(FAQ)
  1.为什么#!/bin/bash必须出现在脚本的第一行?
   #!表明,这是一个脚本,需要由另外的程序来解释执行,而不是直接执行,这一行的剩余部分被视作解释器
  2.如何获取当前shell的名称?
   执行以下的命令就可以了
    $echo $0
  3.如何了解当前shell是交互的还是非交互的?
    编写如下脚本
    case $- in
     *i*) echo "it is interactive";;
     *) echo "it is noninteractive';;
     esac
     再运行就可以了
  4.如何丢掉命令的输出?
    你可以将这些输出重定向到/dev/null文件就可丢掉了
    cmd > /dev/null
    example:
    discard the grep's value(丢掉grep的值)
     if grep soda /etc/hosts > dev/null ;then
      echo "
the soda found!"
     fi
   要丢掉命令的输出和它的出错,可以将它标准错误输出(文件描述符2)重定向到标准输出(文件描述符1),再将STD重定向到/dev/null
   cmd > /dev/null 2>&1
   if grep soda /etc/hosts > dev/null 2>&1;then
      echo "
the soda found!"
     fi
 5.如何向STDERR显示信息?
   echo msg 1>&2
   msg is abbreviate with message
 6.如何判断命令是否执行成功?
   if [ $? -eq 0 ]; then
   echo "
it is success"
   else "
it is failure"
   fi
 7. 如何判断shell是否能够成功地找到某个特定的命令?
   if type cmd > /dev/null 2>&1; then
    echo "
had finded"
   else "
not found"
   fi
 8.可以使用&&和|| 操作符来条件地执行命令吗?
   如:确定一个目录的绝对路径
     path()
     {
    cd "
$1" && pwd
     }
 9.将参数一次传递一个给shell脚本,可能吗?
   用for循环来实现
   for arg in $@
    do
    commads
    echo $arg
   done
 10.如何将传递给脚本的参数,传递给另一个变量?
    cmd=$@
 11.如何将命令的输出存储在变量中?
    可以使用=和``来完成
    variable=`cmd`
    如:DATE=`date`
 12.如何检查一个变量是否为空?
    可用if来实现
    if [ -z "
variable" ]
    then echo "
it is null"
    else printf "
it is non null\n"
    fi
 13.如何判断一个目录的路径名?
   PATHS=`cd dir 2>/dev/null && pwd`
 14.用什么命令可以将有的*.aaa文件改名为*.bbb?
    rename *.aaa *.bbb
    可用mv命令,但一次只能一个,所以还得用for
    OSUFFIX=aaa
    NEWSUFFIX=bbb
    for FILE in *."
$OSUFFIX"
    do
    NEWNAME=`echo "
$FILE"|sed -e "s/$OSUFFIX\$/$NEWSUFFIX/"`
    mv -i "
$FILE" "NEWNAME"
    done
    首先生成当前目录下以变量OSUFFIX结尾的文件的清单,然后使用sed将每个文件名的OSUFFIX替换成NEWSUFFIX。在sed表达式中使用了$字符来定位OSUFFIX到一行的结尾的位置,这就确保了替换的模式是文件名的后缀。在获得了新的文件名后,就可以将保存在FILE中的原始文件名更名为NEWNAME中的新文件名了
15.如何将文件名变为小写?
   可以使用下面的命令
   for FILE in *
   do
   mv -i "
$FILE" `echo $FILE|tr '[A-Z]' '[a-z]'` 2> /dev/null
   done
16.用什么命令可以将有的aaa*文件改名为bbb*?
    rename aaa* bbb*
    可用mv命令,但一次只能一个,所以还得用for
    OSUFFIX=aaa
    NEWSUFFIX=bbb
    for FILE in "
$OSUFFIX"
    do
    NEWNAME=`echo "
$FILE"|sed -e "s/^$OSUFFIX\$/$NEWSUFFIX/"`
    mv -i "
$FILE" "NEWNAME"

    done

阅读(854) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~