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

【学神-RHEL6.5】1-17 shell基础及if表达式

[复制链接]

尚未签到

发表于 2018-8-28 12:50:09 | 显示全部楼层 |阅读模式
  本节所讲内容:
  . shell 基本语法
  . 变量
  . 表达式
  . 判断语句
  . if表达式

  •   什么叫shell
  【例】先看一个简单的shell程序
[root@xuegod163 ~]# vim example01.sh                            #写入一下内容  
#!/bin/bash
  
#This is to show what a example looks like.
  
echo "Our first example"
  
echo "We ar currently in the following directory"
  
pwd
  
echo "This directory contains the following files"
  
ls
  
[root@xuegod163 ~]# chmod +x example01.sh          #赋予一个可执行权限
  
[root@xuegod163 ~]# ./example01.sh                         #执行该shell程序
  
Our first example
  
We ar currently in the following directory
  
/root
  
This directory contains the following files
  
anaconda-ks.cfg     Music
  
Desktop            Pictures
  
Documents       Public
  
Downloads        qla2xxx-8.07.00.16.06.0-k-dd-rhel6u5-2.6.32-431.el6-x86_64.iso
  
example01.sh           Templates
  
install.log           Videos
  
install.log.syslog
  注释:
  #!/bin/bash #!跟shell命令的完全路径。 作用:显示后期命令以哪种shell来执行这些命令。如不指shell,以当前shell作为执行的shell。
  #This is to show what a example looks like.   在shell中以#开始头表示,整个行就被当作一个注释。执行时被忽略。
  shell程序一般以.sh结尾,表名这是一个shell程序

  •   1.1  shell编程
  先了解一些基本概念
  编程语言:机器语言、汇编语言、高级语言
  静态语言:编译型语言,如C、C++、java等
  动态语言:php、shell、python、perl等
  编译器:又称为解释器,可以将人类的语言翻译成机器理解的语言
  弱类型:变量随时声明,shell就是一种弱类型的编程语言
  强类型:变量在适用前必须事先声明

  •   1.2  创建shell程序的步骤
  第一步:创建一个命令和控制结构的shell文件。
  第二步:赋予这个文件一个可执行的权限,使用chmod +x
  第三步:执行。
  方法1:./ example01.sh
  方法2:使用绝对路径。如[root@xuegod63 ~]# /root/ example01.sh。
  方法3:使用bash或sh来执行。[root@xuegod63 ~]# bash example01.sh。这种执行方法可以没有执行权限。

  •   shell变量的运用
  •   变量
  变量是shell传递数据的一种方法。变量是用来代表每个值的符号名。Shell变量分为两类,分别为临时变量和永久变量。
  临时变量:是shell程序内部定义的变量,其使用范围仅限于定义它的程序,对其它程序不可见。
  永久变量:也就是linux系统的环境变量,其值不随shell程序的执行而消失或改变。
  【例】
[root@xuegod163~]# echo $PATH  
/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/root/bin
  
[root@xuegod163 ~]# echo $HOME
  
/root
  用户自定义变量:由字母或下划线开头(不允许数字开头),右面有字母、数字或下划线组成,并且大小写字母的意义不同。变量名的长度没有限制。
  注:使用变量时,要在变量名前加上前缀“$”
  2.2 主要的赋值类型
  2.2.1 变量赋值
  赋值号“=”两边应没有空格
  【例】
[root@xuegod63 ~]# A=aaa  
[root@xuegod63~]# A = aaa
  
bash: A: command not found
  2.2.2将命令的执行结果赋给变量
  【例】
[root@xuegod163 ~]# A=`date`  
[root@xuegod163 ~]# echo $A
  
Sat Jul 25 20:59:47 CST 2015
  2.2.3 变量的传递
  【例】
[root@xuegod163 ~]# B=$A  
[root@xuegod163 ~]# echo $B
  
Sat Jul 25 20:59:47 CST 2015
  2.2.4利用变量和其他字符串组成一个新的字符串
  【例】
[root@xuegod163 ~]# MYDIR=/home/xuegod  
[root@xuegod163 ~]# echo $MYDIR/zhangsan
  
/home/xuegod/zhangsan
  
[root@xuegod163 ~]# DAY=Mon
  
[root@xuegod163 ~]# echo Today is ${DAY}day
  
Today is Monday
  2.2.5 给变量赋值多个单词
  【例】
[root@xuegod63 test]# NAME="mike Ron"  
[root@xuegod63 test]# echo $NAME
  
mike Ron
  
[root@xuegod63 test]# NAME='shenmk'
  
[root@xuegod63 test]# echo $NAME
  
shenmk
  2.2.6 单引号的双引号的区别
  单引号:之间的内容原封不动的指定给了变量
  双引号:之间的特殊符号的含义保留
  【例】
[root@xuegod63 ~]# NAME="mike Ron $NAME"  
[root@xuegod63 ~]# echo $NAME
  
mike Ron shenmk
  
[root@xuegod63 ~]# NAME='mike Ron $NAME'
  
[root@xuegod63 ~]# echo $NAME
  
mike Ron $NAME
  2.2.7 把命令当做变量进行定义
  【例】
[root@xuegod63 ~]# wen=`date +%F` #利用反引号进行定义  
[root@xuegod63 ~]# echo $wen
  
2015-07-25
  
[root@xuegod63 ~]# wen=$(date) #利用小括号加$进行定义
  
[root@xuegod63 ~]# echo $wen
  
Sat Jul 25 20:59:47 CST 2015
  2.3 变量的管理
  2.3.1 列出所有的变量
  set 命令
  【例】
[root@xuegod63 ~]# set | grep DAY  
DAY=Mon
  2.3.2 变量的删除
  unset 命令
  【例】
[root@xuegod63 ~]# echo $NAME  
mike Ron $NAME
  
[root@xuegod63 ~]# unset NAME
  
[root@xuegod63 ~]# echo $NAME
  2.4.1 位置变量
  Shell 解释执行用户的命令时,将命令行的第一个字作为命令名,而其它字作为参数。由出现在命令行上的位置确定为参数称为位置参数。使用$N 来表示
  $0 获取当前执行shell脚本的文件名,包括脚本的路径
  $n 获取当前执行shell脚本的第n个参数,当n大于9时用{n}表示
  【例】
[root@xuegod163~]# vim ./example.sh  
#!/bin/bash
  
Echo “$0”
  
echo "$1"
  
echo "$2"
  

  
[root@xuegod163 ~]# ./example.sh  /etc/passwd  /etc/hosts
  
./example.sh
  
/etc/passwd
  
/etc/hosts
  【例】位置变量在服务启动与停止中的应用
[root@xuegod63 ~]# vim /etc/init.d/vsftpd  
case "$1" in                                           #相当于执行/etc/init.d/vsftpd $1
  
start)
  
start                                                         #当选择 start 时调用 start 函数来启动服务
  
;;
  
stop)
  
stop                                                                  #当选择 stop 时调用 stop 函数来停止服务
  
;;
  
restart|reload)                           # 当选择 restart 或者 reload 时先停止服务再启动服务
  
stop
  
start
  
RETVAL=$?
  
;;
  
echo $"Usage: $0 {start|stop|restart|try-restart|force-reload|status}" #当输入的$1不存在时,利用$0来打印当前执行的脚本
  2.4.2 特殊变量
  有些变量是一开始执行shell脚本时就会设定,且不能被修改,我们称之为特殊变量
  $* 这个程序的所有参数
  $# 这个程序的参数个数
  $$ 这个程序的 PID
  $! 执行上一个后台程序的 PID
  $? 执行上一个命令的返回值
  【例】
[root@xuegod63 ~]# vim z2.sh  
#!/bin/bash
  
echo "$* 表示这个程序的所有参数 "
  
echo "$# 表示这个程序的参数个数"
  
touch /tmp/a.txt
  
echo "$$ 表程序的进程 ID "
  
touch /tmp/b.txt &
  
echo "$! 执行上一个后台命令的 PID"
  
echo "$$ 表程序的进程 ID "
  
执行结果:
  
[root@xuegod63 ~]# ./z2.sh aaabbb ccc
  
aaabbb ccc 表示这个程序的所有参数
  
3 表示这个程序的参数个数
  
3899 表程序的进程 ID
  
3901 执行上一个后台命令的 PID
  
3899 表程序的进程 ID
  关于$?返回值的主要含义
  0
  运行成功
  2
  权限被拒绝
  1-125
  运行失败,命令错误或者参数错误
  126
  找到命令,但不能执行
  127
  未找到命令
  128
  命令被系统强制结束
  2.5 变量的数值计算

  •   用于执行简单的整数运算
  格式:$((算术运算符))

  •   常用的算术运算符
  运算符
  含义
  ++ --
  递增和递减,可前置也可后置
  + - ! ~
  一元运算的正负号逻辑与取反
  + - * / %
  加减乘除余数
  = !=
  相等不相等
  =
  比较大小
  >>2))  
0
  
[root@xuegod63 ~]# echo $((1/dev/null                                                #将所有执行信息重定向到null 中
  
[ $? -eq 0 ] && echo "int" || echo "input erro"      #根据expr执行的返回值来判断是否为整数

  • 变量测试语句
  •   的应用
  格式:test 测试条件
  注意:在使用“[]”简写test时,左中括号后面和右中括号前面必须有空格,如果没有空格则shell不能辨别表达式何时开始何时结束
  5.2 测试的范围
  测试的范围包括整数、字符串、文件
  5.2.1 文件状态的测试
  test -e:目标是否存在(exist)
  test -d:是否为目录(directory)
  test -f:是否为文件(file)
  test -x:文件存在并且可执行
  test -r file:文件存在并且可读
  test -w file:文件存在并且可写
  test -s file 测试大小是为空。是否为空文件
  test File1 –ef File2 两个文件具有同样的设备号和 i结点号
  test File1 –nt File2 文件 1 比文件 2 新
  test File1 –ot File2 文件 1 比文件 2 旧
  test –b File 文件存在并且是块设备文件
  test –c File 文件存在并且是字符设备文件
  test –f File 文件存在并且是正规文件

  test –g File 文件存在并且是设置了组>
  test –G File 文件存在并且属于有效组>  test –h File 文件存在并且是一个符号连接(同-L)
  test –k File 文件存在并且设置了 sticky 位
  test –L File 文件存在并且是一个符号连接(同-h)

  test –o File 文件存在并且属于有效用户>  test –p File 文件存在并且是一个命名管道
  test –t FD 文件描述符是在一个终端打开的
  test –u File 文件存在并且设置了它的 set-user-id 位
  5.2.2 数值的比较
  test -eq:等于(equal)
  test -ne:不等于(Not equal)
  test -gt:大于(greater than)
  test -lt:小于(lesser than)
  test -ge:大于或等于(greater or equal)
  test -le:小于或等于(lesser or equal)
  说明:也可以省略 test 写成:[ int1 -lt int2 ]
  -eq
  ==
  等于(equal)
  -ne
  !=
  不等于(not equa)
  -gt
  >
  大于(greater than)
  -ge
  >=
  大于或等于(greater or equal)
  -lt
  <
  小于(lesser than)
  -le
  

运维网声明 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-557755-1-1.html 上篇帖子: python 从shell读取指定文件以及写入指定文件 下篇帖子: 笔记-Shell特殊变量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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