小雪崩 发表于 2018-8-28 07:39:08

1、shell别名,管道,用户配置文件,变量,read-YHT的运维笔记

  一.shell基础
  cat /etc/shells当前操作系统可以使用的shell
  什么是shell
  实现某种功能的,有执行权限的文本文件
  命令行解释器
  内建命令 (系统内部提供的命令)
  外建命令 (安装对应的软件包才有的命令)
  type cd //查看cd是属于什么类型的命令
  支持快捷键
  支持tab健补全
  历史命令history -c    //清除历史命令
  -w    //马上保存刚执行的命令进.bash_history
  别名
  如何查看当有系统已有别名命令 alias
  如何自定义别名命令 如何删除自定义的别名命令 alias grep='grep --color'unalias grep
  如何永久定义别名命令 /etc/bashrc   ~/bashrc
  定义的别名命令所有用户都可以使用 /etc/bashrc
  如何给某个用户设置别名命令~/.bashrc
  历史命令
  grep 1000 /etc/profile 保存一千条命令
  source /etc/profile 马上生效
  cat ~/.bash_history 存放的历史命令重启系统生效
  管道 |
  命令1 | 命令2 | 命令3
  重定向
  >            ping -c 3 loalhost > /dev/null
  >>   ping -c 3 localhost >> /tmp/err.txt
  <               mail -s "first mail' -u root < /etc/error.txt
      重定向错误输出,覆盖       cd /etc/ 2> /tmp/err.txxt
  2>>   追加
  &> /dev/null 无论对还是错都重定向到空
  &>>追加
  ``   执行命令本身的功能   echo `date + %m`
  ;    顺序执行命令,前面的命令出错不影响后面的命令执行    cd;ls;cd /etc/
  &&   前面的命令执行成功后面的命令才能执行cd /asf &> /tmp/err.txt && ls
  ||   前面的命令失败才执行后面的命令 cd /asf &> /dev/null /|| echo "no file"
  检查主机在不在线
  ping -c 2 127.0.0.1 &> /dev/null && echo "yes" || echo "no"
  shell变量
  变量 用一串固定字符变化的值
  写脚本时把变化的数据用变量来表示
  shell变量类型
  1、自定义变量: 程序根据写脚本的需要定义的变量,定义变量时,要遵循变量的使用规则
  定义变量:
  变量名=变量值
  变量名的命名规则:
  1.可以用字母数字下划线,但不能以数字开头和纯数字
  2.同一个变量赋两个值,最后一个值生效
  3.给变量赋值时,两边不能有空格
  4.区分大小写
  set 显示当前系统内已经定义的所有变量
  set | grep name
  env 只显示系统已有的环境变量
  定义变量(默认的变量的类型都是字符类型)
  变量名=变量值
  name=wsyht
  age=24
  使用变量 $变量名 $name
  输出变量的值 echo $变量名 echo $name $age
  撤消变量 unset 变量名 unset name
  2、系统环境变量:在系统启动时,加载系统配置文件定义的变量,
  变量名和变量值是系统设置,变量名通常用大写字母定义,变存量的值是规定的,通常
  情况下不建议修改系统环境变量的值
  3、预定义变量: 当前脚本使用的shell里预先定义好的变量,变量名是固定的,变量的值不修改
  预定义变量:预先定义好的变量,变量名和值都是固定的。
  $? 上一条命令执行结果的返回状态 0 执行成功
  非0 执行失败
  $0 当前执行脚本的脚本名和路径
  $! 当前终端后台最后一个运行的进程
  $$ 当前终端运行进程的pid号//敲ps可查看进程pid号
  $# 脚本位置参数的个数
  $* 脚本所有位置参数的值
  4、位置变量:在执行脚本或调用函数时给自已传值
  $1... ...$n
  ${10}... ...${N}
  dirname $0   #获取脚本路径
  basename $0#获取脚本名
  位置变量:
  $1~ $9${数字}
  $1脚本的第一个位置变量
  $2脚本的第二个位置变量
  $3脚本的第三个位置变量
  当脚本的位置变量个数大于9时 要这样表示位置变量
  ${10}脚本的第10个位置变量
  ${11}脚本的第11个位置变量
  #!/bin/bash
  echo $#
  echo $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}
  变量的生命周期
  在脚本里定义的变量,只在脚本执行过程中有效
  变量的作用范围:默认情况下只在当前shell里可以使用,
  要想定义的变量在所有的shell里被使用,要把变量定义为全局变量,
  格式
  1.
  export 变量名=值
  2.
  变量名=值
  export 变量名
  变量被定义为全局变量后,这个变量可以在当前shell和当前shell的
  子shell使用
  字符终端下,用户每打开一个新终端时加载的文件
  系统级配置文件(对登陆系统的所有用户都有效)
  1./etc/profile
  2./etc/bashrc
  /etc/profile.d/
  用户级配置文件(只针对对应的用户有效)
  3.~/.bashrc
  4.~/.bash_profile
  图形运行级别下,用户每打开一个新终端时加载的文件
  1、/etc/bashrc
  2、~/.bashrc
  source /etc/bashrc //马上生效
  编写shell脚本
  vim test.sh
  #!/bin/bash    //指定脚本的执行环境,默认是/bin/bash,可以省略,一般不省略
  #注释信息不会在执行脚本时显示出来,是程序员给自已看的
  脚本的功能体
  编写脚本的思路:
  1、明确脚本要实现的功能
  2、哪些数据是变化的,把变化的数据用变量来表示
  3、使用哪种流程控制
  4、使用哪些系统命令
  运行脚本
  1.sh xxx.sh 或 bash xxx.sh
  2.加x权限 ./xxx.sh或 路径/xxx.sh
  3.source xxx.sh或. xxx.sh
  '' 禁止引用其他变量值,$视为普通字符       //不可以引用$变量,当做普通字符看待
  "" 允许通过$符号引用其他变量值   //可以引用$变量
  `` 将命令执行的结果输出给变量   //保持命令的功效,输出给变量
  命令 | awk '{print }'
  head -1 /etc/passwd | awk -F":" '{print $1}'
  free -m | grep Mem | awk '{print $3}'
  read 接收用户从健盘输入的数据
  read 选项 变量名
  -p “输出的提示信息”
  -t n 等待用户输入的超时时间
  接收用户从健盘输入的数据可用read 或 $#(位置参数)
  例:用位置参数接收数据
  #!/bin/bash
  #read -p "请输入要检测的ip地址:"ipaddr
  [$# -eq 0 ] && exit
  # [ -z $ipaddr ] && exit
  echo $1
  ping -c 3 $1 &> /dev/null && echo $1 is online" || echo "$1 not online"
  例2:用read接收数据
  #!/bin/bash

  read>  read -p "请输入你的名字" -t 30 name
  read -p "请输入你的年龄" -t 30 age
  echo $class $name $age

页: [1]
查看完整版本: 1、shell别名,管道,用户配置文件,变量,read-YHT的运维笔记