ycvodzf 发表于 2018-8-28 09:12:39

《Linux shell变量总结回顾》RHEL6

  在实际的生产中,运维一般使用的shell语法还是比较多的,时不时的就要写一个简短shell脚本,大型的shell脚本用到的function 比较多,便于下一个脚本的引入,下面主要总结一些简单的shell命令,语法,便于今后shell脚本的书写。
  环境变量路径:
  # set   //查看到的是局部变量和全局变量2种
  # env//查看系统的全局环境变量
  # echo $PATH//查看系统环境变量路径
  # export $PATH//也可以使用export查看环境变量路径
  # export PATH=$PATH:/date///临时添加/date目录到环境变量路径下
  要想重启主机后还生效就要编辑环境配置文件root/.bashec或/root/.bash_profile与/etc/profile文件,想要立刻生效可以使用命令:
  注:.bash_profile文件支队系统当前用户生效
  # source .bash_profile
  # ls –a    可以查看到这2个文件
  脚本的执行:
  sh script    //这种方法script不需要可执行权限
  ./ script          //必须具有可执行权限
  . script         //这种方法script也不需要可执行权限
  区分局部变量和全局变量
  # str=1000   //局部变量
  # echo $str
  1000
  去编辑一个脚本:
  # vim bianliang.sh
  #!/bin/bash
  echo $str
  # bianliang.sh//我们定义的变量,但是通过脚本却不能输出
  # export str   //添加到全局变量中
  # bianliang.sh   //再次使用完全ok
  1000
  要想完全的清除某个全局变量:
  # unset str清除全局变量
  #env   可以查看到所有全局变量
  && || 的用法:(参数的比对)
  && 条件符合要求才会执行后面的动作
  ||    条件不符合要求时才会执行后面的动作
  //查看/ect目录下是否有/grub.conf文件,有则输出yes,无则输出no。
  # [ -f /etc/grub.conf ] && echo yes|| echo no
  Yes
  查看/shellscripts/hello.sh是否可执行,可执行则输入yes,否则就赋予它可执行权限
  # [ -x /shellscripts/hello.sh ] && echo yes || chmod +x /shellscripts/hello.sh
  # ls
  hello.shipadd.shlogmess_clean.sh
  # hello.sh
  hello world!
  “”和‘’与 ` ` 在shell变量中的区别
  “ ” 允许通过$符引用其他变量
  ‘’禁止引用其他变量符,视为普通字符
  `` 将命令执行的结果输出给变量
  # echo "$PWD is lujing"
  /root is lujing
  # echo '$PWD is lujing'
  $PWD is lujing
  # echo $a
  1000
  # echo $aaaaaaaa//系统把$aaaaa视为一个变量
  # echo ${a}aaaaaa   //把变量用{}括起来,系统才会去输出变量
  1000aaaaaa
  #echo `ls`反引号中的命令时可以单独执行的,然后再由echo输出
  扩展:”\ “反斜杠,作用屏蔽字符的特殊意义
  test命令
  用途:测试表达式是否成立,成立返回值为0,否返回值为其他值。
  格式:test条件表达式[条件表达式]
  ≡ 常见的测试类型
  测试文件的状态
  字符的串比较
  整数值比较
  逻辑测试
  测试文件的状态
  格式:[操作符   文件或目录]
  常见的测试操作符
  -d :测试是否为目录【directory】
  # [ -d /var/spool/ ]
  # echo $?
  0
  -e:测测试目录或文件是否存在【exist】
  # [ -e /etc/passwd ]
  # echo $?
  0
  -f:测试是否为文件【file】
  # [ -f /etc/passwd ]
  # echo $?
  0
  #
  -r:测试当前的用户是否有读取的权限【read】
  # [ -r /etc/shadow ]
  # echo $?
  0
  #
  -w:测试当前的用户是否有写的权限【write】
  # [ -w /etc/shadow ]
  # echo $?
  0
  #
  -x:测试当前的用户是否可执行和该文件【excute】
  # [ -x /etc/shadow ]
  # echo $?
  1
  # ll /etc/shadow
  ----------. 1 root root 1086 2月26 22:38 /etc/shadow
  -L:测试是否为符号链接文件【link】
  # ll /etc/shadow
  ----------. 1 root root 1086 2月26 22:38 /etc/shadow
  # [ -L /etc/shadow ]
  # echo $?
  1
  整数值比较
  格式:[ 整数1 操作符整数2 ]
  常用的操作测试符
  -eq:等于(Equal)
  -ne:不等于(Not Equal)
  -gt:大于(Greater Than)
  -lt:小于(Lesser Than)
  -le:小于或等于(Lessser or Equal)
  -ge:大于或等于(Greater or Equal)
  案例:
  如果登录用户数小于或等于10则输出YES
  # who|wc -l
  2
  # [ `who|wc -l` -le 10 ] && echo "YES"
  YES
  变量的加减法运算:
  变量的加法运算:
  # a=1000
  # echo $a
  1000
  # expr $a + $a
  2000
  # echo $a + $a            //这是2中错误的操作,运算必须使用expr
  1000 + 1000
  # expr $a+$a                //$a + $a 要有空格否则也是错误的
  1000+1000
  变量的乘法运算:
  # expr $a * $a            //* 在操作系统中视为特殊字符,\屏蔽字符的特殊意义
  expr: syntax error
  # expr $a \* $a
  1000000
  # expr 2 / 1      //除法
  2
  # expr 2 – 1      //减法
  1
  # expr 2 % 1                //取余
  0
  位置变量:
  0-9         常用的为1-9
  通过脚本来看些位置变量:
  # cat a.sh
  #!/bin/bash
  echo $1
  echo $2
  echo $3
  echo $0
  # a.sh a b c d e
  a
  b
  c
  /shellscripts/a.sh         //$0打印的是脚本笨的名字
  # a.sh 1 2
  3
  # a.sh 2 3
  5
  # cat a.sh
  #!/bin/bash
  echo `expr $1 + $2`             //$1和$2代表了2个位置变量
  #
  预定义变量
  $#: 命令行中位置参数的个数
  $*: 所有位置参数的内容
  $?: 上一条命令执行后返回的状态,当状态为0时表示正常,非0表示执行异常或出错。
  $$: 当前所在进程的进程号
  $!:后台运行的最后一个进程号
  $0:当前执行的进程/进程名
  脚本的规范书写:
  #!/bin/bash
  #Date : 2014-5-28
  #Author : Create by meng       //脚本的创始人
  #Mail :~~                                 //邮件地址
  #Func (do):this is useradd user script.            //脚本的作用
  #V1.1                  //脚本的版本
  echo "hello,world!"            //后面的才是脚本的内容
  字符串比较
  格式 [ 字符串1 = 字符串2 ]
  [ 字符串1 != 字符串2 ]
  [ -z 字符串 ]
  常用的测试操作符
  =:字符串内容相同
  !=:字符串内容不相同,!号表示相反的意思
  -z:字符内容为空
  #read -p "input your name: "name
  root
  #echo $name
  #[ $name != "root"] && echo "name is erro"
  ##read -p "input your name: "name
  zhangsan
  #[ $name != "root"] && echo "name is erro"
  #echo $name
  逻辑测试
  格式:[表达式1]   操作符[表达式2]
  常用的测试操作符
  -a 或&&:逻辑与,“而且”的意思
  #前后两个表达式都成立是整个测试结果才为真,否则为假
  (前面真则执行后面)
  -o或||:逻辑或,或者的意思
  #操作符两边至少一个为真时,结果为真,否则结果为假
  (前面假则执行后面)
  !:逻辑否
  #当指定条件不成立时,返回结果为真
  if条件语句   --单分支
  当“条件成立“时执行相应的操作
  if条件测试命令               if 磁盘已用空间>80%
  then 命令序列   ==》      then 报警
  fi
  应用案例:
  如果/boot分区的空间使用超过80%,输出报警信息
  #!/bin/bash
  RATE=`df |awk'NR==4{print int($5)}'`
  if [$RATE -gt 80]
  then
  echo "warning,DISK is full!"
  if
  if条件语句--双分支
  当“条件成立”、“条件不成立”时执行不同的操作
  if 条件测试命令                if 3306端口是否在监听状态
  then 命令序列1         ==》      then mysqld 服务已运行
  else 命令序列2                  else 启动mysqld服务
  fi
  引用案例:
  判断vsftp是否在运行。若已运行则输出提示信息,否则重新启动vsftp服务
  #!/bin/bash
  service vsftp status &>/dev/null
  if [ $? -eq 0 ]
  then
  echo "vsftp service is running"
  else
  /etc/init.d/vsftp restart
  fi
  如果/boot分区的空间使用超过80%,输出警报信息。我们来写个脚本
  #vi a.sh
  #!/bin/bash
  #a.sh
  NUM=`df | awk 'NR==5{print int($5)}'`
  if
  [ $NUM -gt 80 ]
  then
  echo "Warning,DISK is full!"
  if
  awk的额外扩展
  # cat /etc/passwd | grep bash | awk -F: '{print ($1)}'
  root
  lenovo
  # ^C
  文章版权:http://www.cnblogs.com/linux-super-meng/
  for循环语句                            for收件人in 邮件地址列表
  根据变量的不通值,重复执行一组命令操作   ==》                do
  for 变量名in 取值列表                     发邮件
  do                                        done
  命令序列
  done
  #!/bin/bash
  for TM in a b c d e
  do
  echo $TM
  sleep 1
  done
  ~
  重复测试指定的条件,只要条件成立则反复执行对应的命令操作
  while 命令或表达式          while 可用内存
页: [1]
查看完整版本: 《Linux shell变量总结回顾》RHEL6