常用shell脚本命令
1、显示包含文字aaa的下一行的内容:
        sed -n '/aaa/{n;p;}'  filename
2、删除当前行与下一行的内容:
      sed -i '/aaa/{N;d;}' filename
3、 删除当前行与下两行的内容:
      sed -i '/aaa/{N;N;d;}' filename
      依次类推,删除三行,则为{N;N;N;d;},分析知:N为next
4、得出以空格为分割的字符串中单词的个数,即统计个数:
      awk ' { print NF } '
      如显示字符串VALUE中的单词个数,其中VALUE为:aaa bbb ccc ddd ee f
      则执行 echo $VALUE | awk ' { print NF } ' 后的结果为6
5、在linux中建立一个文件与另一文件的链接, 即符号链接
      ln -s /var/named/chroot/f
      这要就建立了当前目录的文件f对/var/named/chroot/f 的符号链接。即操作f就意味着操作实际文件/var/named/chroot/f ,这时用ll命令查看的结果如:
    lrwxrwxrwx  1 root root 32 Mar 22 12:f -> /var/named/chroot/f
      注意:当用sed来通过f来删除一部分信息时,会将符号链接的关系丢掉,即会将f变成一个实际文件。所以 需对实际文件进行删除操作。
6、显示指定字符范围内的内容:
      如:显示文件中字符#test begin与#test end之间所有的字符
              sed -n "/#test begin/,/#test end/p"
              或 awk "/#test begin/,/#test end/"
在日常系统管理工作中,需要编写脚本来完成特定的功能,编写shell脚本是一个基本功了!
在编写的过程中,掌握一些常用的技巧和语法就可 以完成大部分功能了,也就是2/8原则.
1. 单引号和双引号的区别
单引号与双引号的最大不同在于双引号仍然可以引用变量的内容,但单引号内仅是普通字符 ,不会作变量的引用,直接输出字符窜。请看如下例子:
  [root@linux ~]# name=HaHa
  [root@linux ~]# echo $name
  HaHa
  [root@linux ~]# myname="$name is wow"
  [root@linux ~]# echo $myname
  HaHa is wow
  [root@linux ~]# myname='$name is wow'
  [root@linux ~]# echo $myname
  $name is wow 
从上面例子可以看出,使用了单引号的时候,那么$name只是普通字符,直接输出而已!
2. 逐行读取文件
使用for循环来读取文件
  for line in ``
  do
  echo $line
  done
注意:由于使用for来读入文件里的行时,会自动把空格和换行符作为一样分隔符,如果行里有空格的时候,输出的结果会很乱,所以 只适用于行连续不能有空格或者换行符的文件
使用while循环读取文件
  |while read line
  do
  echo $line
linux循环执行命令脚本
  done
 
  或者:
 
  while read line
  do
  echo $line
  done <
注意:由于使用while来读入文件里的行时,会整行读入,不会关注行的内容(空格..),所以比for读文件有更好的适用性, 推荐使用while循环读取文件
3. bash shell 脚本中常用隐含变量
$0
当前执行的脚本或者命令名称
$1-$9
代表参数的位置. 举例 $1 代表第一个参数.
$#
脚本调用的参数的个数
$@
所有参数的内容
$*
所有参数的内容
$$
当前运行脚本的进程号
$?
命令执行后返回的状态
$!
后台运行的最后一个进程号
注意: $? 用于检查上一个命令执行是否正确(在Linux中,命令退出状态为0表示该命令正确执行,任何非0值表示命令出错)
$$ 变量最常见的用途是用做暂存文件的名字以保证暂存文件不会重复。
$* 和 $@ 如果输出是一样的,但是在使用for循环,在使用 双引号("")引用时 "$*" 会输出成一个元素 而 "$@" 会按照每个参数是一个元素方式输出
请看测试例子
  #cat test.sh
  #!/bin/sh
  echo '"$@" '
  for i in "$@"
  do
  echo $i
  done
  echo '"$*" output ....'
  for i in "$*"
  do
      echo $i
  done
输出结果
  #sh test.sh a b c d
  "$@"
  a
  b
  c
  d
  "$*" output ....
  a b c d
从输出结果可以看出 "$*" 输出是一行 而 "$@" 输出则是四行
4. 变量内容的删除与替换
我们在一些情况下,需要对变量中的字符窜进行查删除或者替换,就需要使用下表列出的方法
变量设定方式
说明
${变量#关键字}
若变量内容从头开始的资料符合‘关键字’,则将符合的最短资料删除
${变量##关键字}
若变量内容从头开始的资料符合‘关键字’,则将符合的最长资料删除
${变量%关键字}
若变量内容从尾向前的资料符合‘关键字’,则将符合的最短资料删除
${变量%%关键字}
若变量内容从尾向前的资料符合‘关键字’,则将符合的最长资料删除
${变量/旧字串/新字串}
若变量内容符合‘旧字串’则‘第一个旧字串会被新字串取代
${变量//旧字串/新字串}
若变量内容符合‘旧字串’则‘全部的旧字串会被新字串取代
举例如下(删除字符窜中的某个字符):

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。