shangban 发表于 2018-8-22 09:48:24

shell管理脚本

  shell管理脚本
  shell 类型:
  Bsh是Bourne Shell 的缩写产生较早的UNIX Shell程序,实现最基本的解释功能
  Csh是C shell 的缩写,因使用C语言的语法风格而得名,交互式界面做了很多的改进,增加了命令历史,别名,文件名替换等
  Ksh是Kron Shell 的缩写,结合Bsh和Csh两者的功能优势,兼具Bsh的语法和Csh的交互特性,因此很受欢迎
  Bash 是 Bourne Again Shell 的缩写,从名字就可以看出是Bsh的升级替代品,很多linux版本默认运行的shell类型
  Zsh更多的基于交互式考虑,集成了Bash Ksh等多种shell的特点,因此很受青睐
  tcsh一个Csh的兼容升级版本
  查看系统所能使用的shell程序列表:
  对/etc/shells 查看

  系统已经把shell程序做了相应的链接

  切换到新的shell:

  更改用户自己的登录shell

  用户能自己更改shell类型
  由管理员更改用户的shell类型则执行:usermod–s /bin/bash xiaowang即更改为bash
  Bash的常用功能:
  命令历史:
  方向键上下能重复看已经输入过的命令
  在开头加”!”号表示模糊匹配如 !ca就调用了我刚才输入的 cat 命令
  history 命令可以显示历史命令表(默认保存 ~/.bash_history文件中)
  history –c 清除历史命令
  通过”!”加序号,则从新执行指定命令

  设置记录历史命令的条数:
  默认保存1000条命令,这可很不安全,我们分别来针对所有用户和单个用户来设置一下:
  设置所有用户的命令历史条数:
  /etc/profile 里保存了针对所有用户的配置

  这里修该对所有用户生效
  针对个人修改:
  vim /home/xiaowang/.bash_profile

  用户配置将覆盖全局配置(针对个人配置的优先)
  命令别名:
  alias 查看所有的已经设置的别名
  alias 别名=’实际名利’设置一个命令别名
  unalias别名取消这个别名
  unalias–a 取消所有的别名

  标准输入,输出和重定向:
  标准输入(STDIN)默认设备键盘,文件编号为0,
  标准输出(STDOUT)默认设备时显示器,文件编号为1
  标准错误(STAERR)默认设备时显示器,文件编号为2
  “>”输出重定向,如果文件不存在则会建立这个文件
  “>>”追加内容到文件,而不进行覆盖
  “<”输入重定向,提过工作效率
  修改用户密码:

  将标准输出和错误输出分开记录:

  标准输出和错误输出放在一个文件里记录

  管道操作:
  “|”管道符号表示第一个命令的处理结果交个第二个命令处理
  ls–r / | wc–l 表示查看到根并统计一共几行结果输出就为行数了
  例一:找出系统中使用Bash作为登录shell,名称以xiao开头的用户账号,并只显示出用户名和登录shell两个字段

  cut 砍,切割的意思表示从输出结果里切割想要的字段
  -d 指定以什么标志来切割上图中用“:”号来切割
  -f 指定想要输出那些字段,我们输出了第一和第七字段
  例二:查看当前系统的总内存空间,剩余可用空间,去除其他无用信息

  awk用于以空格或其他制表位为分隔
  ‘{print $2,$4}’显示第二和第四个字段
  Shell变量的应用:
  常见的shell变量的类型包括:用户变量环境变量预定义变量位置变量
  用户变量:
  由系统用户自己定义的变量,只有在用户自己的shell环境中有效,因此称为本地变量
  定义新的变量:
  DAY=Sunday
  &号用于引用变量 echo $DAY 将会显示sunday

  为变量赋值的常用方法:
  (=) 最基本的变量赋值方法
  (“) 双引号,使用双引号时,允许在双引号内引用其他变量的值
  (‘) 单引号,不允许在单引号内引用其他变量的值,”$”号作为普通字符来看
  (`) 反撇号,允许将命令的执行的结果赋给变量
  双引号:

  单引号:

  反撇号:

  嵌套使用命令替换:可以用 $ ( )

  read read命令Bash的内置命令,可以从键盘读取输入,实现交换式过程。 read将从标准输入读入一行内容,并以空格为分隔符,将读入的字段分别赋值给指定列表中的变量(多余的内容赋值给最后一个变量),若指定的变量只有一个,则将整行内容赋值给该变量
  -p 设置提示信息

  设置提示信息(交互式):

  变量的作用范围:
  对于用户自定义的变量,只能在当前的shell环境中使用,因此又称为局部变量,在开启的新的子shell里是无效的,为了使用户自定义的变量在所有的shell中都可用,我们要用export 命令来指定为全局变量 export 可以同时指定多个变量为全局变量,不需要$号,变量名以空格隔开

  也可以在创建的时候就指定为全局变量;


  清除自定义的变量;
  unset 命令用于清除自定义的变量,后面指定一个或多个变量名即可,多个的话用空格分开

  数值变量的运算:(用expr表达式命令)
  “+”加法运算
  “- ”减法运算
  “\*”乘法运算
  “/”除法运算
  “%”求模运算(取于运算)

  环境的变量:
  环境的变量是指用户登录后,系统预设的shell变量,其功能是设置用户的工作环境,包括用户的宿主目录,命令查找路径,用户当前目录,登录终端等
  set 查看环境变量
  查看多个变量;

  添加路径信息:

  主提示符和辅助提示符的更改:

  环境变量的配置文件:
  /etc/profile ~/.bash_profile前者为全局配置文件后者为个人配置文件后者覆盖前者

  位置变量:
  当执行service network restart 命令时,service脚本程序的第一个位置参数用”$1”表示,对用的值是”network” , 第二个位置参数用”$2”表示,对应的值为”restart”,“$0”代表所执行的命令或脚本程序的名称,虽然”$0”与位置变量的格式相同,但是”$0”属于系统预定义变量而不是位置变量,在执行shell命令操作时,除了第一个字段(命令名或脚本程序名)以外,其余的字符串参数按照从左到右的顺序依次赋值给位置变量
  预定义变量:
  $# 表示命令行中位置参数的数量
  $* 表示所有位置参数的内容
  $? 表示命令执行后返回的状态,(0 表示正确,非0 都为错误)
  $! 后台运行的最后一个进程的进程号
  $$ 表示当前进程的进程号
  $0 表示当前执行的进程的进程名

  编写shell脚本:
  编写一个完整的shell脚本须有以下步骤:
  1.运行环境的设置指定用哪一个shell进行解释开头部分指出如(#! /bin/bash)
  2.一个号的脚本注释是不能少的,方便以后维护(注释行以#号开头)
  3.可执行命令,这是核心(关于语句结构下篇讲解)
  执行shell脚本方式:
  赋予脚本X(执行)权限后执行
  “.”以点命令执行脚本等于 source 命令,
  shell解释器运行例: bash xxxx.sh (一般调试时用)
  shell脚本案例一:
  在每周五下班前(17:30)检查公共共享目录/var/ftp/pub/中的内容,并将其中所有子目录及文件的详细列表和当时的时间这些信息追加保存到 /var/log/pubdir.log 日志中,然后清空该目录中的内容
  vim /root/ftpclean.sh

  chmod770 /root/ftpclean.sh
  crontab–e

  shell 脚本案例二:
  公司数据库目录位于 /var/lib/mysql要求至少三天做一次完整备份,备份前需要统计目录占用的总空间大小,并将备份日期,目录空间大小等信息保存到临时文件 /tmp/mysql.txt ,然后使用tar 命令将 /tmp/mysql.txt 随着数据库一块备份到 /opt/dbbak目录中,备份文件名要体现处当天的日期
  1. 创建要备份到的目录
  mkdir /opt/dbbak
  2. 编写shell脚本
  vim /root/mysqlbak.sh

  3. 添加脚本的执行权限

  4. 添加计划任务

  本文档完毕!!!

页: [1]
查看完整版本: shell管理脚本