设为首页 收藏本站
查看: 1152|回复: 0

Linux shell脚本-基础学习笔记

[复制链接]

尚未签到

发表于 2018-8-29 07:09:58 | 显示全部楼层 |阅读模式
  Linux脚本能力不是太强,最近再补习下,毕竟linux shell在日常工作中还是很普遍的,
  用起来更方便、省时省力。
  以下是学习笔记,偏理论,后面有几个例子,供参考。
  shell脚本组成元素
  系统命令、文本处理工具(grep\sed等)、变量、条件判断、循环结构和函数
  --------------------------------------------
  三剑客:grep,sed,awk,还有wc,sort,head等
  ------------------------------------------------
  echo:
  echo -e “\033[40;35m...\033[0m”
  背景颜色:40-49,40黑色,41红色,42绿色,43***...
  字体颜色:30-39,30黑色,31红色,32绿色...
  -------------------------------------------------------
  sort:
  -d 按字典顺序排序
  -n 按数字大小输出
  -r 逆序输出排序结果
  -k 指定分类是域上的数字分类
  -t 域分隔符;用非空格或tab分割域
  sort -k3 -n -r -t:/etc/passwd
  以第三个域的分类,按照数字的逆序排列
  ----------------------------------------------------
  wc:
  -c 统计字符数量
  -l 统计行数
  -w 统计单词数量
  -----------------------------------------
  diff:
  对文件进行比较
  ------------------------------------------------------
  grep:
  -n 在每行前显示其行的编号
  -v 逆向输出,打印不匹配的行
  忽略大小写
  grep ‘[Tt]his’ file.txt
  过滤出非#开头的行
  grep ‘^[^#]’ file.txt
  模糊匹配
  grep “s...n” file.txt
  ----------------------------------------------------
  sed:行编辑器
  s 替代
  i 行前插入
  a 行后插入
  d 删除全部匹配的行
  D 删除首次匹配的行
  sed -n ‘1,4p’ /etc/passwd
  -n防止打印原本的文本,只打印修改后的输出
  p打印
  1,4第一行到第四行
  sed '/80/D' file.txt
  删除首次匹配到80的行
  sed ‘s/var/usr/g’ file.txt
  用var替代usr
  s是替代
  g表示全部替代
  没有g则是首次匹配替代
  sed ‘50,¥s/help/man/g’file.txt
  替代50行之后的
  ---------------------------------------------
  awk:列编辑器
  -F ; 以;为分隔符
  NR 当前处理的行数
  NF 当前处理的列数
  ¥0 选取整行
  ¥1 第一列
  ¥NF 最后一列
  awk -F :‘{print NR,¥1,¥2}’ /etc/password
  以:为分隔符,打印出第一列和第二列的内容
  awk -F :‘{print NR,¥1,¥NF}’ /etc/password
  打印出第一列和最后一列
  -----------------------------------------------------
  脚本规范
  #!/bin/bash
  #注释
  正文
  脚本执行权限
  chmod u+x hello.sh   #u指users,x指执行权限
  ./hello.sh
  本地变量
  只在当前用户下的当前shell中,当用户退出shell则变量不存在
  a=1
  echo ¥a   #如果后面有单位则echo ¥{a}m
  1
  环境变量:
  适用于所有用户进程,用户注销时失效
  位置变量:
  用于指定变量位置
  特殊变量:
  ¥#         列出传递给脚本的所有参数
  ¥*(¥@)  用一个字符显示所有向脚本传递的参数
  ¥¥        脚本运行的当前进程ID号
  ¥?        显示最后命令的退出状态。0表示没有错误,其他值则表示异常
  “”  可引用除¥、`、\、字符以外的任意字符或字符串
  ‘’  与双引号类似,但是shell会忽略任何的引用值,屏蔽其特殊含义
  `     shell将反引号的内容作为系统命令并执行
  \     如字符有特殊含义,反斜线会屏蔽其特殊含义,防止误解
  echo -e   -e是转译符  \n换行
  ------------------------------------------------
  date +%T 显示系统当前时间
  uptime 显示系统CPU负载
  条件测试:
  test -option xxx
  返回0表示真,返回1表示假,返回其他值结果同样为假
  xxx
  -d 目录
  -e 是否存在
  -f 是否为普通文件
  -s 文件大小是否等于0
  -r -w -x 是否可读 可写 可执行
  -a 与操作
  -o 或操作
  ! 非操作
  == 两个字符串相等
  != 两个字符串不等
  -z 空字符串
  -n 非空字符串
  -eq 等于
  -ne 不等于
  -gt 大于
  -lt 小于
  -ge 大于等于
  -le 小于等于
  条件选择:
  if...else...fi
  if 条件
  then        #条件为真
  命令1
  else        #条件为假
  命令2
  fi           #结束
  case...in...esac
  case variable in
  模式1命令1..;;
  模式2命令2..;;
  esca
  *  匹配任意字符
  ? 匹配任意单字符
  [] 匹配字符范围
  ---------------------------------------------
  循环结构:
  for variable in list
  do
  命令1
  命令2
  done
  for i in `seq 1 3`
  do
  ssh hostname-$i
  service httpd restart
  done
  while支持死循环
  while 条件
  do
  命令1
  命令2
  done
  -------------------------------------------------------------------
  函数结构
  #!/bin/bash
  #
  function 函数名()
  {
  命令1
  ...
  }
  单次任务调度
  @ 指定时间调度一次性任务
  @ [选项] time
  -f 从文件中读取命令或者脚本
  -m 作业完成发mail
  -v 显示执行时间
  启动服务
  service atd start
  删除任务 at rm
  at -f test.sh 10:00pm Feb 11
  Crontab 定期运行脚本
  -e 添加时间和脚本等任务
  -l 列出已经添加的时间和脚本任务
  -r 删除目前的任务
  -v 列出任务状态
  全局  /etc/crontab
  用户  /var/spool/cron   使用-e添加即在当前用户下
  crontab用户控制
  /etc/cron.allow
  /etc/cron.deny
  *  *  *  *  *   分 时 日 月 星期几
  */5 每五分钟
  -------------------------------------------------------------
  举例1:
  日期     昨天     今天     涨跌   涨幅
  ...
  20080413 3,384.43 3,294.83 -54.37 -1.239%
  20080621 3,3254.43 3,454.83 59.31 3.231%
  ...
  列出20081011的所以数据
  grep "20081011" shanghai.txt
  列出200806月份上涨的数据
  grep "200806" shanghai.txt | grep -v "-"
  -v 取反,理解为获取非“-”的数据
  grep "200808" shanghai.txt |wc -l
  对8月份的数据进行数量统计
  获取8月份涨幅最大的数据
  grep "200808" shanghai.txt | sort -k5 -n | tail -1
  -k5 以第五列进行排序
  -n  按照数字大小进行排序
  -r  逆序排列
  sed -n "$p"   取最后一行
  sed -n "1p"   取第一行
  head -1       第一行
  列出10月份上涨的数据,仅取日期和涨幅
  grep "200810" shanghai.txt | awk '{if($4>0){print $1,$5}}'
  awk支持shell语句
  列出十月份涨幅在5-80之间的数据
  grep "200810" shanghai.txt | awk '{if($4>5 && $4

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557893-1-1.html 上篇帖子: Shell字符串比较相等、不相等方法小结 下篇帖子: 运维技巧系列之shell随机生成密码脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表