首页 > 代码库 > shell编程

shell编程

shell

变量

    ----特殊变量:
        $# 是传给脚本的参数个数
    $0 是脚本本身的名字
    $1 是传递给该shell脚本的第一个参数
    $2 是传递给该shell脚本的第二个参数
    $@ 是传给脚本的所有参数的列表
    $* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
    $$ 是脚本运行的当前进程ID号
    $? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误
    -----内部变量
        $BASH:记录bash shell的路径
    $BASE_VERSION:记录bash shell的版本信息
    $DIRSTACK:显示目录栈的栈顶值
         pushd:用于将目录压入栈
         popd:栈顶目录弹出
    $HOSTNAME:记录了主机名
    $SECONDS:记录脚本从执行到结束耗费的时间

命令替换
     是指将命令的标准输出作为值赋给某个变量,有两种方式
       1.使用`linux命令`
       2.$(linux命令)

    
字符串处理   

计算字符串的长度:
           ${#....}和 expr length
        索引命令:在字符串string上第一次匹配substring的位置,没有返回0
         expr index $string $substring
        匹配命令 :返回匹配到的substring的长度,没有返回0
         expr match $string $substring
    抽取字符串
            #{string:position}
        #{string:position:length}


grep常用命令:         

-i  忽略大小写
      -v 查找不包含匹配项的行
      -l 从多个文件中查找包含匹配项
      -c 打印匹配的行数
          -r 递归搜索子目录
find命令:
      用法 find  路径 选项 操作
         选项有 name 按文件名
            perm 按文件权限
        mtime -n +n 按文件更改时间 -n 代表在n天内 +n 代表在n天前
    -ok/-exec 对匹配的文件执行shell命令


正则表达式:    

\ 忽略正则表达式中特殊字符的原有含义
    ^ 匹配正则表达式的开始行
    $ 匹配正则表达式的结束行
    \< 从匹配正则表达式的行开始






    查找当前目录下含有关键字route的文件:
     find ./ -name ‘*‘|xargs grep ‘route‘
        查找当前目录下后缀名为.txt文件含有关键字route:
     find ./ -name ‘*.txt‘ | xargs grep ‘route‘


DATE
       date命令提供了日期的加减运算
       date +%Y%m%d --date="-1 day"  可以得到昨天的时间
       data -s 设定当前时间
       date -s “01:01:01 2008-05-23″ 可以设定当前系统时间
       时间的加减
        显示现在的年月日  date  +%Y%m%d    
       date +%Y%m%d --date="+1 day"? //显示后一天的日期
       date +%Y%m%d --date="-1 day"? //显示前一天的日期
       date +%Y%m%d --date="-1 month"? //显示上一月的日期
       date +%Y%m%d --date="+1 month"? //显示下一月的日期
       date +%Y%m%d --date="-1 year"? //显示前一年的日期
       date +%Y%m%d --date="+1 year"? //显示下一年的日期


shell中特殊符号汇总:
~
账户的home目录:~+ 当前的工作目录,~- 上次的工作目录
 
; 分号
在 shell 中,担任”连续指令”功能的符号就是”分号”

‘string‘ 单引号
被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。

"string" 双引号
被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展

?    问号
 在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元


* 星号
相当常用的符号。在文件名扩展(Filename expansion)上,她用来代表任何字元,包含 null 字元。

 

循环结构

if判断
  ----简单if结构
     if expression
      then
        ....
      fi
  ----if/else结构
   if expression
      then
        ....
      else
        ....
      fi

case结构(常用于根据表达式的值来选择要执行的语句)
  case variable in
    value1)
       .....;;
    value2)
       .....;;
    value3)
       .....;;
  esac
   


for循环
   ----列表for循环
      for variable in {list}
      do
         ....
         ....
      done
   ----不带列表的for循环(由用户指定参数和参数的个数)
      for variable
       do
         ....
     ....
       done
   ----类c风格的for循环
     for ((expr1;expr2;expr3))
     do
        ....
     done


while循环
   
   while expression
    do
      ....
    done
   







   

shell编程