Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1466997
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: LINUX

2012-05-16 11:04:26



知识点如下:
 
 
1,关于shell编程中的变量,shell编程中的变量分为4种
 
本地变量:只对本系统本用户自己的shell有用
 
环境变量:对本系统的所有shell都有用  用export来声明变量  例如:export
 
          A=1  另外:查看系统能用的shell的命令是cat /etc/shells
 
           查看系统当前用户正使用的shell的命令:echo $SHELL
 
特殊变量:是bash内置的变量,用于调用bash脚本编程环境的一些特殊的执行结果
  
          比如:$?  它的作用是表明上一个命令是否执行成功,在linux中 0 表
 
          示成功,非零的都是错误,不同的值表示的错误不一样
 
位置变量:可以直接向脚本中传递参数并且被脚本调用的变量,例如 $1  $2  $3...
 
能够进行算术运算的几个特殊符号:$[]  $(( )) 例如:a=3 b=5 echo "$[$a+$b]"
 
 
2,关于PS1  echo $PS1  export PS1='[\u@\h \w]\$'
         
 
3,变量的文件一般都是放在一下几个文件里的
 
  按控制范围分为:
 
  全局变量:/etc/profile  /etc/profile.d/*,/etc/bash.rc
 
  局部变量:~/.bash_profile ~/.bash.rc  ~/.bash_logout
 
  按作用类型分为:
 
  profile类:设置环境变量   和    运行用户登录要运行的一些命令
 
  bashrc 类:设置别名       和     设置本地变量
 
 
 
解决关于脚本为什么有时候不能用的问题 
 
  shell分为交互式登录shell 和非登录shell
 
  所谓登录shell就是在用户进入系统的时候才开始执行的shell
 
  读取顺序:/etc/profile-->/etc/profile.d/*-->~/.bash_profile--
 
  >~/.bashrc/-->/etc/bashrc(越往后优先级越高)
 
   非登录shell就是用户还没有进入系统的时候就已经开始执行的shell
 
   ~/.bashrc-->/etc/bashrc-->/etc/profile.d/*(越往后优先级越高)
 
4,关于输入输出重定向以及管道
 
   标准输入:/dev/stdin        0        <  (前面省略0)
 
   标准输出:/dev/stdout       1        >  (前面省略1)
 
   标准错误输出:/dev/stderr   2        2>  
 
   如果想实现正确错误输出都到一个文件,则 用    &>
 
   小技巧:很多情况下我们在定向一个内容的时候,我们如果用> 我们很可能会把
 
   一个文件以前的内容弄丢,这个时候我们可以用set -C开启一个
 
   功能 即 不会让文件被覆盖掉
 
   关闭这个功能用set +C
 
   管道:
 
   echo "123456" | passwd --stdin  redhat (用一个命令直接创建一个用户
 
   redhat,密码是123456)  passwd --stdin 表示从现实器上读取密码 
 
  (passswd默认情况下是从键盘读入密码)
 
   命令tee:tee就是一个丁字路口 ,把一个输入流分给两个部分如:
 
    ls /etc |tee  /tmp/txt.txt | less (把etc下的内容给txt.txt,并且显示出来)
 
   自定义文件输出重定向:
 
   在我们编写脚本的时候我们常常要往一个文件里面写很多东西,为了提高效率
   我们用这个命令 exec 3> /etc/out.txt  然后我们向out.txt里面定向内容 的时候我们就可以   ls -l /etc  >&3,其实文件是被写到了/out.txt里了(这种放法在要多次向一个文件里定向内容的时候很有用,可以极大地提高读写效率)
 
  关闭则用:exec 3>&-
 
 
5,循环语句:for 变量  in  队列;do
 
                 statement 1
                 statement 2
 
            done 
   三种不同写法:
           for  I   in 1 2 3 4 5=
      for  I     in   `seq 1 5`=
           for  I     in   (1..5)
 
    队列可以分为以下几个类型:
           简单列表:1 2 3 6 7
           复杂列表:this is tom's  cat (这里’会被当成一个字符,所以用的时候应该这样写 \' 表示转义)
           从变量读:in  `seq 1 $max`
           从命令读: `ls /var`
           通配符  : for i in /var/*
 
 
6,   tail -2 /etc/passwd | cut -d: f1  截取/etc/passwd 下后两行的内容,然后以”:“为分割取第一部分   (这个命令很有用)
 
 
7,grep与正则表达式:
 
   grep :
           -i                          不区分大小写
              -v                          显示没有匹配到的行
           -n                          显示匹配到的行和它的行号
           An                           连收索到的前n行也显示
           Bn                             ///后n行显示
           Cn                           context,上下文
          --color                       匹配到的窜高亮显示
 
 
 
  定义:有一堆的元字符组成,表达的不是自己本身的意思,而是其他的意思
 
  算了 ,正则表达式本人还没有完全理解,以后会以一篇专门的博文给出,今天
  不在这里写了 ,SEE YOU !  
阅读(497) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~