shell脚本编写

要写shell肯定要知道shell是什么又能做什么

  1. 是什么:shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能,以达到我们所想要的处理目的
  2. 目的:写shell脚本的目的是为了能有效而便捷的控制和管理用户,以及一些网络和用户情况的纪录;shell脚本比其他语言要简单而易学

链接:shell脚本百度百科

shell脚本的基本知识

一. 正则表达式

这里先要申明正则表达式与bash里面的通配符是不一样的

^word   界定符行首
word&   界定符行尾
.       表一定有一个任意字符
\       跳脱字符,去除特殊符号的意义
*       重复0到无穷个前一个字符
[list]  任意一个括号内的字符
[n1-n2]  字符范围。可以是[a-z] [A-Z] 与ASCII编码有关
[^list]   括号内的^意思是非
二. shell变量
  • 变量的设定与取用
变量表达式:变量名=变量值 
name="hello world$?"               // " "双引号保留原有特性
ehco $name  =>hello world0

name='hello world$0' 

echo $name  =>hello world$0
  • 环境变量
  1. export name //使变量name变为环境变量
  2. unset name //取消环境变量的设定
三. shell循环
  • while 条件 //当条件成立时进行循环
    do
    程序段
    done
  • untril 条件 //当条件成立是结束循环
    do
    程序段
    done
  • for 变量 in con1 con2 con3 //定式循环
    do
    程序段
    done
四. shell判断
  • test指令判断
  • 判断符 [ ] //[ ]是test的另一种表达方式
name="test"
[ ${name} == "test" ] #注意等号旁边的空格不能省【空格 空格==空格 空格】

  • 条件判断
  1. if条件判断
if[条件判断式一]; then
条件一成立时
else
条件一不成立时
fi  //结束
  1. case esac
case ${name} in
"hello")
  echo "Hello World!"
  ;;
"")
  echo "You MUST input ${name} someword"
  ;;
*)
  echo "oh y!"
五. 撷取命令
  • cut

cut -d ‘分隔字符’ -f 第几字段
-d :后面接分隔字符。与 -f 一起使用;
-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;
-c :以字符 (characters) 的单位取出固定字符区间;

echo $PATH |cut -d ':' -f 1-3,5
/bin:/usr/bin:/sbin:/usr/local/bin
  • grep

grep [选项] [文件]
参数 作用
-b 将可执行文件当文本文件来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择 – 仅列出没有关键词的行。v 是 invert 的缩写。
-r 递归搜索文件目录

grep hello  helloworld.txt  #返回的是helloworld.txt中的一个包含hello的行

shell小程序

问题:统计所给字典在文章中出现的字频

要解决的问题:

  1. 循环读出文章
  2. 统计文章中的字频
  3. 判断是否是所给字典中的词
#!/bin/bash

filename=1.txt

#先用数组统计文本中的字频,数组使用字符串为下表,将统计好的字频重定向入文件sumcount
awk '{for(i=1;i<=NF;i++) count[$i]++} END{for(patten in count) printf("%-20s%d\n",patten,count[patten])}' $filename  >>   sumcount

#用cut将字典中的单词单独切出,用while循环再read逐行读进LINE变量,判断字典中的字与sumcount中的字频是否有相同相同则输出
cat edited.csv|cut -d "," -f 1 |while read LINE

do 
awk -v name=$LINE '{if($1==name)print $0}' sumcount

done  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值