shell语法小结

1、  set命令

当没有参数的时候,列出系统中所有的自定义变量值;当有参数的时候,重置基本参数如$1、$2等。如set `date` 将date命令的输出当作输入参数;

 

2、let命令

      执行算术运算。功能如i=j+1,shell语法为:

      let “i=$j+1”,等同于 ‘expr’。 后者只能作用于整数,如 i=`expr $i+1`; 如果使用非整数,退出状态不为0

 

3、expr  

      expr也有模式匹配功能。

   可以使用expr通过指定冒号选项计算字符串中字符数。.*意即任何字符重复0次或多次。
        $value=accounts.doc
        $expr $value : '.*'
   输出:12
   在expr中可以使用字符串匹配操作,这里使用模式. d o c抽取文件附属名。
       $expr $value : '/(.*/).doc' 在圆括号前加转义符号是表示圆括号是用于提取功能的。
   输出:accounts

 

4、shift命令

       将参数表向左移动一个位置,$2变成$1,...,依次类推。

 

5、shell中可以嵌套命令,使用/`来保护内层命令,如`cd /`pwd/``。

 

6、设置IFS为换行符:IFS=’

’(还真得换行)

 

7、两个特殊操作

     命令1 && 命令2 :只有在命令1执行成功时才执行命令2;

     命令1 || 命令2 :命令1失败才执行命令2;

 

8、变量赋值

     “”引用的字符串需要shell解析其中的``、$、/等特殊字符,而’’引用的字符串则被看作完全的

   字符串,echo ‘`pwd`’将输出`pwd`;而echo “`pwd`”将输出当前目录;

   变量
 含义
 
$var
 Var的值,若无定义则无值
 
${var}
 同上,用于同$varx等类型变量区分
 
${var-thing}
 Var有定义时,取值$var;无定义时取值thing,而$var不变
 
${var=thing}
 Var有定义时,取值$var;无定义时取值thing,$var值设为thing
 
${var?message}
 有定义时取值$var;否则打印message并退出shell,若message为空串,打印var:parameter not set
 
${var+thing}
 有定义时取值thing;否则无值
 


 

9、shell内部变量

      变量
 含义
 
$#
 参数个数
 
$*
 所有参数
 
$@
 同上,稍有区别
 
$-
 Shell的选择项
 
$?
 上次执行命令返回值
 
$$
 Shell的进程标识符
 
$!
 用&启动的最后一个命令的进程标识符
 
$HOME
 cd命令的缺省参数
 
$IFS
 参数分割词的字符表
 
$MAIL
 信件文件,当其改变时给出信息you have mail
 
$PATH
 搜索命令的目录表
 
$PS1
 提示符串,缺省为$
 
$PS2
 后继命令行提示符,缺省为>
 


有关$*和$@得归纳:

 $*和$@扩展为参数,并被重复扫描;参数得空格将字符串分成多个参数;

 “$*”表示shell文件的所有参数及其空格连在一起作为单个词处理;

“$@”与shell文件接收的参数等价,参数中的空格被忽略,其结果是等同于原来参数的一个单词列表。

 

10、 shell模式匹配规则

*      匹配任意字符串,包括空字符串

?      匹配任意单字符串

[ABC]  匹配ABC中任意字符

“…”   完全与…匹配,引号保护特殊字符,也可以写成’…’

/C     匹配C

 

11、 case语句

case word in

  模式1)  命令;;

  模式2)  命令;;

  …

  *)       命令[;;]

esac

只能匹配一个模式

 

12、 if 语句

if 命令

then

else

fi

其中换行很重要,then、else和fi仅在换行或分号之后被识别,else部分可选。可以利用case语句替代if和test测试语句,对于test命令不是内部命令的情况下,case语句执行的要快;

 

13、循环

1)for i [in 文件(参数)列表]

do

  循环体

done

        如果i后面没有in部分,则隐含地表示对shell文件的全部参数,即$*

 

      2) While 命令

            do

                  循环体,只要命令返回状态为真便继续进行

  done

 

3)until 命令

do

   循环体,只要命令返回状态为假便继续执行

Done

 

例如:

While sleep 60

do

Done

每隔60秒执行一次循环中的操作;

 

   另外,where处的控制命令可以是true、false、或者是:,冒号命令是一个shell内部命令,仅仅计

   算参数值,然后返回“真”,但是它不需要调用系统中的命令,所以效率比true命令高;

 

  4)break命令:退出循环,取自C语言。

 

14、点号命令:

   将文件作为标准输入,从中读入一行一行的命令在当前shell中执行,不要求文件具有可执行权限;

 

15、 文件命令习惯,后面加上当前进程号码$$为好

 

16、标准输入命令read

$read greeting

Hello,world

           $echo $greeting

                 Hello,world

 

17、here document 输入

         <<s   从本地输入,直至出现字符串s为止,但是要解析输入中的特殊字符,``,$和/。

    <<’s’ 同上,不进行替换。

    <</s 同上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值