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

《Linux shell变量总结回顾》RHEL6

[复制链接]

尚未签到

发表于 2018-8-28 09:12:39 | 显示全部楼层 |阅读模式
  在实际的生产中,运维一般使用的shell语法还是比较多的,时不时的就要写一个简短shell脚本,大型的shell脚本用到的function 比较多,便于下一个脚本的引入,下面主要总结一些简单的shell命令,语法,便于今后shell脚本的书写。
  环境变量路径:
  [root@localhost ~]# set   //查看到的是局部变量和全局变量2种
  [root@localhost ~]# env  //查看系统的全局环境变量
  [root@localhost ~]# echo $PATH  //查看系统环境变量路径
  [root@localhost ~]# export $PATH  //也可以使用export查看环境变量路径
  [root@localhost ~]# export PATH=$PATH:/date/  //临时添加/date目录到环境变量路径下
  要想重启主机后还生效就要编辑环境配置文件root/.bashec或/root/.bash_profile与/etc/profile文件,想要立刻生效可以使用命令:
  注:.bash_profile文件支队系统当前用户生效
  [root@localhost ~]# source .bash_profile
  [root@localhost ~]# ls –a    可以查看到这2个文件
  脚本的执行:
  sh script    //这种方法script不需要可执行权限
  ./ script          //必须具有可执行权限
  . script           //这种方法script也不需要可执行权限
  区分局部变量和全局变量
  [root@localhost ~]# str=1000   //局部变量
  [root@localhost ~]# echo $str
  1000
  去编辑一个脚本:
  # vim bianliang.sh
  #!/bin/bash
  echo $str
  [root@localhost ~]# bianliang.sh  //我们定义的变量,但是通过脚本却不能输出
  [root@localhost ~]# export str   //添加到全局变量中
  [root@localhost ~]# bianliang.sh   //再次使用完全ok
  1000
  要想完全的清除某个全局变量:
  # unset str  清除全局变量
  #env   可以查看到所有全局变量
  && || 的用法:(参数的比对)
  && 条件符合要求才会执行后面的动作
  ||    条件不符合要求时才会执行后面的动作
  //查看/ect目录下是否有/grub.conf文件,有则输出yes,无则输出no。
  [root@localhost ~]# [ -f /etc/grub.conf ] && echo yes  || echo no
  Yes
  查看/shellscripts/hello.sh是否可执行,可执行则输入yes,否则就赋予它可执行权限
  [root@localhost shellscripts]# [ -x /shellscripts/hello.sh ] && echo yes || chmod +x /shellscripts/hello.sh
  [root@localhost shellscripts]# ls
  hello.sh  ipadd.sh  logmess_clean.sh
  [root@localhost shellscripts]# hello.sh
  hello world!
  “”和‘’与 ` ` 在shell变量中的区别
  “ ” 允许通过$符引用其他变量
  ‘’禁止引用其他变量符,视为普通字符
  `` 将命令执行的结果输出给变量
  [root@localhost ~]# echo "$PWD is lujing"
  /root is lujing
  [root@localhost ~]# echo '$PWD is lujing'
  $PWD is lujing
  [root@localhost ~]# echo $a
  1000
  [root@localhost ~]# echo $aaaaaaaa  //系统把$aaaaa视为一个变量
  [root@localhost ~]# echo ${a}aaaaaa   //把变量用{}括起来,系统才会去输出变量
  1000aaaaaa
  #echo `ls`  反引号中的命令时可以单独执行的,然后再由echo输出
  扩展:”\ “反斜杠,作用屏蔽字符的特殊意义
  test命令
  用途:测试表达式是否成立,成立返回值为0,否返回值为其他值。
  格式:test  条件表达式  [条件表达式]
  ≡ 常见的测试类型
  测试文件的状态
  字符的串比较
  整数值比较
  逻辑测试
  测试文件的状态
  格式:[操作符   文件或目录]
  常见的测试操作符
  -d :测试是否为目录【directory】
  [root@localhost /]# [ -d /var/spool/ ]
  [root@localhost /]# echo $?
  0
  -e:测测试目录或文件是否存在【exist】
  [root@localhost /]# [ -e /etc/passwd ]
  [root@localhost /]# echo $?
  0
  -f:测试是否为文件【file】
  [root@localhost Packages]# [ -f /etc/passwd ]
  [root@localhost Packages]# echo $?
  0
  [root@localhost Packages]#
  -r:测试当前的用户是否有读取的权限【read】
  [root@localhost /]# [ -r /etc/shadow ]
  [root@localhost /]# echo $?
  0
  [root@localhost /]#
  -w:测试当前的用户是否有写的权限【write】
  [root@localhost /]# [ -w /etc/shadow ]
  [root@localhost /]# echo $?
  0
  [root@localhost /]#
  -x:测试当前的用户是否可执行和该文件【excute】
  [root@localhost /]# [ -x /etc/shadow ]
  [root@localhost /]# echo $?
  1
  [root@localhost /]# ll /etc/shadow
  ----------. 1 root root 1086 2月  26 22:38 /etc/shadow
  -L:测试是否为符号链接文件【link】
  [root@localhost /]# ll /etc/shadow
  ----------. 1 root root 1086 2月  26 22:38 /etc/shadow
  [root@localhost /]# [ -L /etc/shadow ]
  [root@localhost /]# 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
  [root@localhost 桌面]# who|wc -l
  2
  [root@localhost 桌面]# [ `who|wc -l` -le 10 ] && echo "YES"
  YES
  变量的加减法运算:
  变量的加法运算:
  [root@localhost ~]# a=1000
  [root@localhost ~]# echo $a
  1000
  [root@localhost ~]# expr $a + $a
  2000
  [root@localhost ~]# echo $a + $a              //这是2中错误的操作,运算必须使用expr
  1000 + 1000
  [root@localhost ~]# expr $a+$a                //$a + $a 要有空格否则也是错误的
  1000+1000
  变量的乘法运算:
  [root@localhost ~]# expr $a * $a              //* 在操作系统中视为特殊字符,\屏蔽字符的特殊意义
  expr: syntax error
  [root@localhost ~]# expr $a \* $a
  1000000
  [root@localhost ~]# expr 2 / 1      //除法
  2
  [root@localhost ~]# expr 2 – 1        //减法
  1
  [root@localhost ~]# expr 2 % 1                //取余
  0
  位置变量:
  0-9           常用的为1-9
  通过脚本来看些位置变量:
  [root@localhost shellscripts]# cat a.sh
  #!/bin/bash
  echo $1
  echo $2
  echo $3
  echo $0
  [root@localhost shellscripts]# a.sh a b c d e
  a
  b
  c
  /shellscripts/a.sh           //$0打印的是脚本笨的名字
  [root@localhost shellscripts]# a.sh 1 2
  3
  [root@localhost shellscripts]# a.sh 2 3
  5
  [root@localhost shellscripts]# cat a.sh
  #!/bin/bash
  echo `expr $1 + $2`             //$1和$2代表了2个位置变量
  [root@localhost shellscripts]#
  预定义变量
  $#  : 命令行中位置参数的个数
  $*  : 所有位置参数的内容
  $?  : 上一条命令执行后返回的状态,当状态为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的额外扩展
  [root@localhost ~]# cat /etc/passwd | grep bash | awk -F: '{print ($1)}'
  root
  lenovo
  [root@localhost ~]# ^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、欢迎大家加入本站运维交流群:群②: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-557548-1-1.html 上篇帖子: Linux Shell常用技巧(十一) 交互式使用shell-442938684 下篇帖子: 自动生成C、C++、shell程序基本框架脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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