Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388987
  • 博文数量: 70
  • 博客积分: 1919
  • 博客等级: 上尉
  • 技术积分: 1179
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-24 20:05
文章分类

全部博文(70)

文章存档

2014年(2)

2013年(29)

2012年(20)

2011年(1)

2010年(13)

2009年(5)

分类: LINUX

2013-10-12 09:41:00

经常在写shell脚本的时候,碰到各种特殊符号,有时候不知道什么意思,今天搜到一片文章,原文链接地址:http://blog.chinaunix.net/uid-7620762-id-86773.html
里边解释的非常好,但是自己亲自动手做一遍试验,参照该链接并且写了部分小脚本测试将其总结如下:
1. {} 大括号

a 大括号可用于通配符扩张:

例如:ls kk{aa,bb}s 这条命令相当于:ls kkaas kkbbs

      mkdir {u1,u2}-{d1,d2}

      会建立 u1-d1 u1-d2  u2-d1 u2-d2 文件夹

b 大括号可用于语句块,如果你想在某个单个命令的地方使用多条命令就可以使用大括号构造语句块。

如:

{

    ls

    mkdir aa

    cd aa

    echo “hello world!”>file.txt

    cat file.txt

    pwd

    cd ..

    rmdir aa

}

c 大括号用于参数扩展,它在处理字符串和位置变量时,是十分有用的。

     ${name:-default} 使用一个默认值(一般是空值)来代替那些空的或者没有赋值的变量name;
     ${name:=default}使用指定值来代替空的或者没有赋值的变量name;
     ${name:?message}如果变量为空或者未赋值,那么就会显示出错误信息并中止脚本的执行同时返回退出码1。
     ${#name} 给出name的长度
     ${name%word} 从name的尾部开始删除与word匹配的最小部分,然后返回剩余部分
     ${name%%word} 从name的尾部开始删除与word匹配的最长部分,然后返回剩余部分
     ${name#word} 从name的头部开始删除与word匹配的最小部分,然后返回剩余部分
     ${name##word} 从name的头部开始删除与word匹配的最长部分,然后返回剩余部分

例如:name=“abcdefgcde”

      echo ${name:?"error msg!"} 输出 abcdefgcde

      echo ${name%"cde"} 输出abcdefg

      echo ${name%%"cde"} 输出abcdefg

      echo ${name#"cde"}输出abcdefgcde

      echo ${name##"cde"}输出abcdefgcde

2 中括号[]

a 通配符扩展,匹配任意一个单个字符

如 ls /[eu][ts][cr]匹配 /etc /usr

b 用于条件判断符号

if [ $? != 0 ] 等价于 if test -d "$?"!= 0

3 `command` 反引号 表示程序执行返回的结果 等价于 $(command)

4    $# 它的作用是告诉你引用变量的总数量是多少
    $$ 它的作用是告诉你shell脚本的进程号;
    $*  以一个单字符串显示所有的脚本传递的参数。等价于$1 $2 $3.......;
    $@  与$*基本类似(参见序号7),但在数组赋值时有些不同;
    $? 前一个命令的退出码;
    $-  显示shell使用的当前选项;
    $!  最后一个后台运行的进程ID号。

5 $((expr))对括号内表达式求值

6 脚本传入参数涉及的特殊符号

shell中几种特殊的参数变量的引用:

$1、$2、$3……${10}、${11}、${12}…… :表示脚本传入的的各个参数,注意当需表示两位数以后的参数时数字要用花括号括起。    

$@ 列出所有的参数,各参数用空格隔开    

$*: 列出所有的参数,各参数用环境变量IFS的第一个字符隔开

7. ''和""

''不转义字符 ""转义字符

例如:name="aabb"

     echo "$name" 输出结果 aabb

     echo '$name' 输出结果 $name

8.  : 表示空建指令 返回值为0

例如:


    echo $? 得到结果0

并且 while : 可以得到一个无限循环的结果,如下:

while :

do

  echo "aa"

done

该语句会一直输出字符串 aa

9. *匹配任何字符及字符串 ?匹配任意一个单个字符 ~代表当前用户主目录

10.  **表示次方的运算
阅读(1664) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~