变量:

  1 . 变量声明

  • 直接使用变量 + 赋值

    1. #!/bin/bash
    2. NAME='HELLO WORD'
    3. echo $NAME
  • 使用 declare 关键字声明
    1. declare(选项)(参数)
    2. +/-:"-"可用来指定变量的属性,"+"则是取消变量所设的属性;
    3. -f:仅显示函数;
    4. r:将变量设置为只读;
    5. x:指定的变量会成为环境变量,可供shell以外的程序来使用;
    6. i:[设置值]可以是数值,字符串或运算式。
    7.  
    8. #!/bin/bash
    9. declare -i NAME
    10. NAME="hello word"
    11. echo $NAME

  2. 删除变量

  • Shell中变量无需删除,在脚本结束后会自动回收(环境变量除外),也可以手动删除变量

    1. #!/bin/bash
    2. NAME="HELLO WORD"
    3. uset NAME

  4. 变量类型:

  •  局部变量

    1. #!/bin/bash
    2. #声明局部变量NAME
    3. local NAME="hello word"
  •  环境变量

    1. #!/bin/bash
    2.  
    3. #先声明,后导出
    4. NAME="hello word"
    5. export NAME
    6.  
    7. #直接导出
    8. export NAME="hello word"

  5 . 查看变量

  1.     printenv //查看当前所有环境变量
  2.     set //查看当前所有变量

  1.  

Shell脚本格式:

 shell 脚本第一行必须是   #!/bin/bash

条件判断:(整数比较,字符比较,文件判断)

  表达式:

  1.     [ expression ]
  2.     [[ expression ]]
  3.     test expression

  分支语句:

  1. 分支语句
  2. if 判断条件
  3. then
  4. statement1
  5. statement2
  6. ...
  7. else
  8. ...
  9. fi
  10.  
  11. 多分支
  12. if 判断条件
  13. then
  14. statement1
  15. statement2
  16. ...
  17. elif
  18. statement1
  19. statement2
  20. ...
  21. else
  22. statement1
  23. statement2
  24. ...
  25. fi

  

整数比较:

  1. -eq:判断是否数值相等 eg # [ $a -eq $b ] 相等返回1 不等返还0
  2. -ne :判断是否数值相等 eg # [ $a -ne $b ] 相等返回0 不等返还1
  3. -gt : 大于判断
  4. -lt 小于判断
  5. -ge:大于或等于
  6. -le 小于或等于

  例子:判断文件大小  如果大于100行 则输出大文件  否则 输出小文件

  1. #!/bin/bash
  2.  
  3. LINES=`wc /etc/passwd`
  4. echo $LINES
  5. NEWLINES=`echo $LINES | cut -d' ' -f1`
  6. [ $NEWLINES -gt 100 ] && echo 'this is big file' || echo 'this is small file'

 或者

  1. #!/bin/bash
  2. FILE_PATH='/home/eko/passwd'
  3. if [ `wc -l $FILE_PATH | cut -d' ' -f1` -gt 100 ]
  4. then
  5. echo 'this is big file'
  6. else
  7. echo 'this is small file'
  8. fi

文件测试

  1. -e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]
  2. -d filename 如果 filename为目录,则为真 [ -d /tmp/mydir ]
  3. -f filename 如果 filename为常规文件,则为真 [ -f /usr/bin/grep ]
  4. -L filename 如果 filename为符号链接,则为真 [ -L /usr/bin/grep ]
  5. -r filename 如果 filename可读,则为真 [ -r /var/log/syslog ]
  6. -w filename 如果 filename可写,则为真 [ -w /var/mytmp.txt ]
  7. -x filename 如果 filename可执行,则为真 [ -L /usr/bin/grep ]
  8. filename1-nt filename2 如果 filename1 filename2新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
  9. filename1-ot filename2 如果 filename1 filename2旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

 

  1. #shell判断文件夹是否存在
  2.  
  3. #如果文件夹不存在,创建文件夹
  4. if [ ! -d "/Top" ]; then
  5. mkdir -p /Topfi
  6.  
  7. #shell判断文件,目录是否存在或者具有权限
  8.  
  9. folder="/Top"
  10. file="/Top/test.txt"
  11.  
  12. # -x 参数判断 $folder 是否存在并且是否具有可执行权限
  13. if [ ! -x "$folder"]; then
  14. mkdir "$folder"
  15. fi
  16.  
  17. # -d 参数判断 $folder 是否存在
  18. if [ ! -d "$folder"]; then
  19. mkdir "$folder"
  20. fi
  21.  
  22. # -f 参数判断 $file 是否存在
  23. if [ ! -f "$file" ]; then
  24. touch "$file"
  25. fi
  26.  
  27. # -n 判断一个"变量"是否有值
  28. if [ ! -n "$file" ]; then
  29. echo "$file 变量为空!"
  30. exit 0
  31. fi
  32.  
  33. # 判断两个变量的字符串内容是否相同
  34. if [ "$file1" = "$file2" ]; then
  35. echo "$file1 equal $file2"
  36. else
  37. echo "$file1 not equal $file2"
  38. fi

字符测试

  1. #!/bin/sh
  2.  
  3. #测试各种字符串比较操作。
  4. #shell中对变量的值添加单引号,爽引号和不添加的区别:对类型来说是无关的,即不是添加了引号就变成了字符串类型,
  5. #单引号不对相关量进行替换,如不对$符号解释成变量引用,从而用对应变量的值替代,双引号则会进行替代
  6. #author:tenfyguo
  7.  
  8. A="$1"
  9. B="$2"
  10.  
  11. echo "输入的原始值:A=$A,B=$B"
  12.  
  13. #判断字符串是否相等
  14. if [ "$A" = "$B" ];then
  15. echo "[ = ]"
  16. fi
  17.  
  18. #判断字符串是否相等,与上面的=等价
  19. if [ "$A" == "$B" ];then
  20. echo "[ == ]"
  21. fi
  22.  
  23. #注意:==的功能在[[]]和[]中的行为是不同的,如下
  24.  
  25. #如果$a以”a”开头(模式匹配)那么将为true
  26. if [[ "$A" == a* ]];then
  27. echo "[[ ==a* ]]"
  28. fi
  29.  
  30. #如果$a等于a*(字符匹配),那么结果为true
  31. if [[ "$A" == "a*" ]];then
  32. echo "==/"a*/""
  33. fi
  34.  
  35. #File globbing(通配) 和word splitting将会发生, 此时的a*会自动匹配到对应的当前以a开头的文件
  36. #如在当前的目录中有个文件:add_crontab.sh,则下面会输出ok
  37. #if [ "add_crontab.sh" == a* ];then
  38. #echo "ok"
  39. #fi
  40. if [ "$A" == a* ];then
  41. echo "[ ==a* ]"
  42. fi
  43.  
  44. #如果$a等于a*(字符匹配),那么结果为true
  45. if [ "$A" == "a*" ];then
  46. echo "==/"a*/""
  47. fi
  48.  
  49. #字符串不相等
  50. if [ "$A" != "$B" ];then
  51. echo "[ != ]"
  52. fi
  53.  
  54. #字符串不相等
  55. if [[ "$A" != "$B" ]];then
  56. echo "[[ != ]]"
  57. fi
  58.  
  59. #字符串不为空,长度不为0
  60. if [ -n "$A" ];then
  61. echo "[ -n ]"
  62. fi
  63.  
  64. #字符串为空.就是长度为0.
  65. if [ -z "$A" ];then
  66. echo "[ -z ]"
  67. fi
  68.  
  69. #需要转义<,否则认为是一个重定向符号
  70. if [ $A /< $B ];then
  71. echo "[ < ]"
  72. fi
  73.  
  74. if [[ $A < $B ]];then
  75. echo "[[ < ]]"
  76. fi
  77.  
  78. #需要转义>,否则认为是一个重定向符号
  79. if [ $A /> $B ];then
  80. echo "[ > ]"
  81. fi
  82.  
  83. if [[ $A > $B ]];then
  84. echo "[[ > ]]"
  85. fi

组合测试 

  1. -a
  2. -o

  3. if [ $a -gt 10 -a $a -lt 100 ] 或者 if[ $a -gt 10 ]&&[ $a -lt 100 ]
  4. if [ $a -lt 10 -o $a -gt 100 ] 或者 if[ $a -lt 10 ] ||[$a -gt 100]

退出脚本

exit [状态码]: 退出脚本

如果没有指定状态码,则最后执行一条命令的状态码就是退出状态码

位置参数 / 特殊参数

  1. #!/bin/bash
  2. echo "first argument is $1"
  3. echo "second argument is $2"

  $1 : 第一个参数

  $2 : 第二个参数

  ...

  $# : 参数的个数

  $* : 参数列表

  $@ : 参数列表

  1. eko@ubuntu:~$ ./test.sh first second
  2. first argument is first
  3. second argument is second

  

Shell 编程 (变量和条件测试)的更多相关文章

  1. Shell编程-05-Shell中条件测试与比较

    目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试     在Shell脚本中各种条件结构和流 ...

  2. shell脚本进阶之条件测试与条件语句

       接着上篇博客,今天整理一下关于条件测试和条件语句方面的知识. shell脚本进阶之条件测试    在编写shell脚本时,经常需要对一些条件进行判断,可以使用测试命令test辅助完成测试过程.t ...

  3. shell编程变量赋值

    [shell编程变量赋值] 1.等号两边均不能有空格存在.例, a="hello world"   2.变量和其它文字以{}或空格格开,否则会混淆.例, 有时候变量名可能会和其它文 ...

  4. 【转】shell学习笔记(三)——引用变量、内部变量、条件测试、字符串比较、整数比较等

    1.env显示当前的环境变量 2.PS1='[\u@\h \w \A] \$' 可以设置bash的命令与提示符. 3.echo $$ 显示当前bash的PID号 4.echo $?显示上一条指令的回传 ...

  5. Shell编程中的条件判断(条件测试)

    Shell中的条件判断(测试)类型: 1) 整数测试 2) 字符测试 3) 文件测试 条件测试的表达式:        (注: expression 与 [] 之间空格不能省略) [ expressi ...

  6. 3、Ansible playbooks(Hosts、Users、tasks、handlers、变量、条件测试(when、迭代)、templates)

    Ansible playbooks playbook是由一个或多个“play”组成的列表.play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角色.从根本上来讲 ...

  7. Linux_10------Linux之shell编程------变量

    .-9 vim num.sh #! /bin/bash num1=$1 num2=$2 sum=$(($num1+$num2)) #变量sum是num1和num2的综合 echo $sum 执行 ./ ...

  8. Linux Shell编程变量赋值和引用

    我们可以使用任意一种文字编辑器,比如gedit.kedit.emacs.vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行):   #!/bin/sh  ...  注意:最好使用“! ...

  9. shell编程—变量(三)

    在shell脚本中,变量分两种,系统变量和自定义变量. 系统默认变量是系统自带的一些变量,如path为路径变量 用户自定义变量为在编写吧脚本的时候自己定义的一些变量 变量名命名规则 首个字符必须为字母 ...

随机推荐

  1. java设计模式-工厂系列

    一.简单工厂 1.背景: 任意定制交通工具的类型和生产过程 代码: Moveable.java package com.cy.dp.factory; public interface Moveable ...

  2. Java学习——加法器

    package cys; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.aw ...

  3. 廖雪峰Java4反射与泛型-2注解-2定义注解

    1.定义注解 使用@interface定义注解Annotation 注解的参数类似无参数方法 可以设定一个默认值(推荐) 把最常用的参数命名为value(推荐) 2.元注解 2.1Target使用方式 ...

  4. 廖雪峰Java3异常处理-2断言和日志-1使用断言

    1.断言 断言Assertion是一种程序调试方式 使用assert关键字 断言条件预期为true 如果断言失败,抛出AssertionError,停止程序 可选的断言消息,断言失败,就会抛出 pub ...

  5. 廖雪峰Java2面向对象编程-4抽象类和接口-2接口

    1.接口的定义 抽象方法本质上是定义接口规范. 在抽象类中定义了一个抽象方法,子类中必须实现这个抽象方法. public abstract class Person{ public abstract ...

  6. Jmeter(二十五)Jmeter之系统函数

    都忘了Jmeter4.0已发布((*^▽^*))具体优化项还没体验,记录一下,传送门:http://jmeter.apache.org/download_jmeter.cgi Jmeter的系统函数已 ...

  7. [UE4]根据名字调用函数(蓝图)

    一.Set Timer by Function Name 二.Set Timer by Event

  8. Iptabels防火墙和SElinux

    两者的区别: iptables用于设置防火墙(firewall), 即管理内外通信. iptables是Linux下功能强大的应用层防火墙工具iptables 能做到“控制内部机器上网与不上网,访问哪 ...

  9. visual studio 版本管理从tfs迁移到svn

    1.首先要解除解决方案的tfs绑定 清除(删除)项目下的所有版本控制文件,这些文件有:*.vssscc,*.vspscc 删除这些版本控制文件比较简单,搜索这些后缀的文件,删除即可. 修改项目的解决方 ...

  10. 关于Vue实例的生命周期created和mounted的区别

    什么是生命周期 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过 ...