710661809 发表于 2018-8-22 09:05:46

shell脚本与命定


[*]  变量、函数的定义与引用,其表达方法很多,我选下面这种:
  变量名=`命定`   #变量定义
  $变量名       #变量的引用
  函数名()
  {
  命定1;
  命定2;
  .....
  }          #函数的定义
  函数名      #函数的引用
  例如我第一篇博文里的
  user_add()
  {
  id smbmin &>/dev/null;#smbmin是已经存在的用户
  while (($?==0))
  do
  read -p "please input user name:"user_name;
  id $user_name &>/dev/null;
  done
  useradd   $user_name -g smbkefu -s /sbin/nologing;
  smbpasswd -a $user_name;
  echo "$user_name is ok!"
  }                      #定义user_add函数
  user_add                  #引用user_add函数
  2.脚本中常用命定
  sort 主要用来排序,它选项很多,我只列常用的
  -n:按数字排序
  -r:反向排序
  -u: 只显示不重复的
  还有一个就是按某列进行排序
  sort -t '分隔符' -k '列号'
  uniq 主要用来去重和统计重复的行
  -i:忽略大小写
  -c:统计不同行的重复次数
  -u:只显示唯一的行
  awk以一行一行的处理文件,主要用来截取文件的某段信息
  基本表达式为:awk -F '分隔符' '条件{print 位置参数"输出语句"位置参数}'
  $0为全行,
  $n为第N个字段
  NR为行号
  NF为总行数
  sed文本在线编辑工具,一行一行处理,主要用于对文件的增删改查
  基本表达式为:sed -[选项] "行号,行号 操作" 文件
  或者 sed -[选项] "/条件/操作" 文件
  其中主要常用选项有:
  -i:直接对文件里面内容操作
  -n:显示匹配的行,否者会全部显示
  删:操作中删除行为d ;若要删除字段这用 s/字段//g 来实现,原理是把这个字段变成空格来实现删除。
  增:在某行前添加一个新行主要用i,某行后面添加为a;如要行首添加但不换行则为 s/^/字段/,行尾添加但不换行为 s/$/字段/;若要某个字段1前添加某个字段2则为:s/字段1/字段1字段2/。
  改:若要把字段1改为字段2则为:s/字段1/字段2/g,加了g就是全局替换,否则只替换匹配行的第一个字段。
  查:用的是-n选项和p操作。
  值得注意的是sed的操作中=为打印行号。
  cut 用来截取某个字段
  -d '指定分隔符'
  -f '提取的段号'
  -c 以字符为单位
  wc 用来统计
  -l 统计总共的行
  -w 统计总共的字符
  -m 统计总共的字节
  grep用来过滤一般与|一起用
  -c:统计行数
  -n:显示行号
  -E:支持正则表达式,也可以写作egrep
  -v:显示不匹配的行(取反)
  tail -n 数字 取倒数几行
  head -n 数字 取头几行
  这是我目前整理出来的实用的命定选项,如有错误请指正,如有更优或补充请建议

页: [1]
查看完整版本: shell脚本与命定