BASH 中的变量介绍
BASH 中的变量都是不能含有保留字,不能含有 "-" 等保留字符,也不能含有空格。

简单变量
在 BASH 中变量定义是不需要的,没有 "int i" 这样的定义过程。
如果想用一个变量,只要他没有在前面被定义过,就直接可以用,
当然你使用该变量的第一条语句应该是对他赋初值了,
如果你不赋初值也没关系,只不过该变量是空( 注意:是 NULL,不是 0 )。
不给变量赋初值虽然语法上不反对,但不是一个好的编程习惯。

好了我们看看下面的例子:
首先用 vi 编辑下面这个文件 hello2:
#!/bin/bash
# give the initialize value to STR
STR="Hello World"
echo $STR

在上面这个程序中我们需要注意下面几点:
一,变量赋值时,'='左右两边都不能有空格;
二,BASH 中的语句结尾不需要分号(";");
三,除了在变量赋值和在FOR循环语句头中,BASH 中的变量使用必须在变量前加"$"符号,
将上面程序中第三行改为 "echo STR" 再试试,看看会出什么结果。==>output: STR
四,由于BASH 程序是在一个新的进程中运行的,
所以该程序中的变量定义和赋值不会改变其他进程或原始 Shell 中同名变量的值,也不会影响他们的运行。
更细致的文档甚至提到以但引号括起来的变量将不被 BASH 解释为变量,如 '$STR' ,而被看成为纯粹的字符串。
而且更为标准的变量引用方式是 ${STR} 这样的,$STR 自不过是对 ${STR} 的一种简化。
在复杂情况下(即有可能产生歧义的地方)最好用带 {} 的表示方式。

BASH中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。
如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串。
请看下面的例子:
#!/bin/bash
x=1999
let "x = $x + 1"
echo $x
x="olympic'"$x
echo $x

关于整数变量计算,有如下几种:" + - * / % ",他们的意思和字面意思相同。
整数运算一般通过 let 和 expr 这两个指令来实现,如对变量 x 加 1 可以写作:let "x = $x + 1" 或者 x=`expr $x + 1`
在比较操作上,整数变量和字符串变量各不相同,
详见下表:
对应的操作    整数操作    字符串操作
相同       -eq                    =
不同       -ne                   !=
大于       -gt                     >
小于       -lt                    <
大于或等于    -ge    
小于或等于    -le    
为空        -z
不为空        -n

比如:
比较字符串 a 和 b 是否相等就写作:if [ $a = $b ]
判断字符串 a 是否为空就写作: if [ -z $a ]
判断整数变量 a 是否大于 b 就写作:if [ $a -gt $b ]
更细致的文档推荐在字符串比较时尽量不要使用 -n ,而用 ! -z 来代替。(其中符号 "!" 表示求反操作)
BASH 中的变量除了用于对 整数 和 字符串 进行操作以外,另一个作用是作为文件变量。BASH 是 Linux 操作系统的 Shell,因此系统的文件必然是 BASH 需要操作的重要对象,如 if [ -x /root ] 可以用于判断 /root 目录是否可以被当前用户进入。
下表列出了 BASH 中用于判断文件属性的操作符:
运算符    含义( 满足下面要求时返回 TRUE )
-e file    文件 file 已经存在
-f file    文件 file 是普通文件
-s file    文件 file 大小不为零
-d file    文件 file 是一个目录
-r file    文件 file 对当前用户可以读取
-w file    文件 file 对当前用户可以写入
-x file    文件 file 对当前用户可以执行
-g file    文件 file 的 GID 标志被设置
-u file    文件 file 的 UID 标志被设置
-O file    文件 file 是属于当前用户的
-G file    文件 file 的组 ID 和当前用户相同
file1 -nt file2    文件 file1 比 file2 更新
file1 -ot file2    文件 file1 比 file2 更老

注意:上表中的 file 及 file1、file2 都是指某个文件或目录的路径。

关于局部变量
在 BASH 程序中如果一个变量被使用了,那么直到该程序的结尾,该变量都一直有效。
为了使得某个变量存在于一个局部程序块中,就引入了局部变量的概念。
BASH 中,在变量首次被赋初值时加上 local 关键字就可以声明一个局部变量,如下面这个例子:
#!/bin/bash
HELLO=Hello
function hello {
local HELLO=World
echo $HELLO
}
echo $HELLO
hello
echo $HELLO
该程序的执行结果是:
Hello
World
Hello
这个执行结果表明全局变量 $HELLO 的值在执行函数 hello 时并没有被改变。也就是说局部变量 $HELLO 的影响只存在于函数那个程序块中。

BASH 中的变量与 C 语言中变量的区别
这里我们为原来不熟悉 BASH 编程,但是非常熟悉 C 语言的程序员总结一下在 BASH 环境中使用变量需要注意的问题。
1,BASH 中的变量在引用时都需要在变量前加上 "$" 符号(第一次赋值及在For循环的头部不用加 "$"符号);
2,BASH 中没有浮点运算,因此也就没有浮点类型的变量可用;
3,BASH 中的整形变量的比较符号与 C 语言中完全不同,而且整形变量的算术运算也需要经过 let 或 expr 语句来处理;

BASH 中的基本流程控制语法
BASH 中几乎含有 C 语言中常用的所有控制结构,如条件分支、循环等,下面逐一介绍。
2.4.1 if...then...else
if 语句用于判断和分支,其语法规则和 C 语言的 if 非常相似。其几种基本结构为:
if [ expression ]
then
statments
fi
或者
if [ expression ]
then
statments
else
statments
fi
或者
if [ expression ]
then
statments
else if [ expression ]
then
statments
else
statments
fi
或者
if [ expression ]
then
statments
elif [ expression ]
then
statments
else
statments
fi
值得说明的是如果你将 if 和 then 简洁的写在一行里面,就必须在 then 前面加上分号,
如:if [ expression ]; then ... 。下面这个例子说明了如何使用 if 条件判断语句:
#!/bin/bash

if [ $1 -gt 90 ]
then
echo "Good, $1"
elif [ $1 -gt 70 ]
then
echo "OK, $1"
else
echo "Bad, $1"
fi

exit 0
上面例子中的 $1 是指命令行的第一个参数,这个会在后面的“BASH 中的特殊保留字”中讲解。

备注:随笔中内容来源于网上资料整理,仅供参考。

Linux Bash Shell快速入门 (二)的更多相关文章

  1. Linux Bash Shell 快速入门

    BASH 的基本语法 最简单的例子 —— Hello World! 关于输入.输出和错误输出 BASH 中对变量的规定(与 C 语言的异同) BASH 中的基本流程控制语法 函数的使用 2.1     ...

  2. Linux Bash Shell快速入门 (三)

    forfor 循环结构与 C 语言中有所不同,在 BASH 中 for 循环的基本结构是: for $var in dostatmentsdone 其中 $var 是循环控制变量, 是 $var 需要 ...

  3. Linux Bash Shell快速入门(一)

    BASH 的基本语法· 最简单的例子 —— Hello World! · 关于输入.输出和错误输出 · BASH 中对变量的规定(与 C 语言的异同) · BASH 中的基本流程控制语法 · 函数的使 ...

  4. Shell 快速入门(十八):特殊符号的使用

    在 Shell 语言中,经常会看到中括号和括号组成的特殊标识,例如:[].[[]].(()).$(()).().这些符号经常使我们非常迷惑,弄清楚它们之间的作用和区别非常必要. 在开始之前,我们先来学 ...

  5. linux BASH shell设置字体与背景颜色

    linux BASH shell下设置字体及背景颜色的方法. BASH shell下设置字体及背景颜色  echo -e "\e[31mtest\e[41m"  \e[30m 将字 ...

  6. 【Linux】linux bash shell之变量替换::=句法、=句法、:-句法、-句法、=?句法、?句法、:+句法、+句法

    linux bash shell之变量替换::=句法.=句法.:-句法.-句法.=?句法.?句法.:+句法.+句法   linux bash shell之变量替换::=句法.=句法.:-句法.-句法. ...

  7. Linux Bash Shell常用快捷键

    Linux Bash Shell常用快捷键 table { margin: auto } 快捷键 功能 tab 补全 ctrl + a 光标回到命令行首 ctrl + e 光标回到命令行尾 ctrl ...

  8. Linux bash shell All In One

    Linux bash shell All In One Linux https://tinylab.gitbooks.io/shellbook/content/zh/chapters/01-chapt ...

  9. linux bash shell & lsof & grep & ps

    linux bash shell & lsof & grep & ps lsof list all open files # lsof & grep $ lsof -P ...

随机推荐

  1. 如何稀释 流事件 (如,onscroll、change、input、mouseover 等 事件)

    1.问题引入:https://segmentfault.com/q/1010000000707337?_ea=62905 2.javascript中的函数节流和函数去抖:https://www.cnb ...

  2. 写在Flutter 1.0之前

    开始 大概有半年没有写东西了,感觉时间过得飞快,18年也过一小半,趁着谷歌大会再为Flutter这个耀眼的新星,再吹一波! 都beta3了,1.0还会远吗 Flutter团队依然不紧不慢,一步一个脚印 ...

  3. spring boot项目打包成war

    一.修改打包类型 在pom.xml中修改 <packaging>war</packaging> 二.移除嵌入式tomcat插件,并以依赖方式引入 <dependency& ...

  4. JavaScript-Tool-截取头像:ShearPhoto

    ylbtech-JavaScript-Tool-截取头像:ShearPhoto ShearPhoto 2.0 发布,支持HTML5本地截取头像,支持美图秀秀特效,支持几十M数码相片压缩截取 1.返回顶 ...

  5. Oracle 11g 体系结构 --SGA PGA 前后台进程

    Oracle服务器主要由实例.数据库.程序全局区.前台进程 实例:用来提供管理数据库的功能 数据库:由Oracle数据库文件组成,用来存储系统数据 ;一般有:数据文件.控制文件.重做日志文件 而实例可 ...

  6. qtp的三种录制模式(转)

    QTP提供三种不同的录制方式:正常录制(Normal Recording).模拟录制(Analog Recording)和低级录制(Low Level Recording). 1.正常录制(Norma ...

  7. APP测试功能点

    1.使用APP时手机耗电情况 2.APP占用手机内存 3.APP在不同网络下的使用情况(WiFi/4G/3G/2G) 4.APP安装包大小 5.APP流量消耗 6.APP支持系统版本(android, ...

  8. Python 2 将死,你准备好了吗?

    Python 软件基金会宣布,到 2020 年元旦,将不再为编程语言 Python 2.x 分支提供任何支持.这一天将标志着一出延续多年的戏剧的高潮:Python 从较旧的.功能较弱的.广泛使用的版本 ...

  9. Swift——(六)Swift中的值类型

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/twlkyao/article/details/34855597     在Swift中,结构体和枚举 ...

  10. SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势

    一.提示(Hint)概述 1为什么引入Hint? Hint是Oracle数据库中很有特色的一个功能,是很多DBA优化中经常采用的一个手段.那为什么Oracle会考虑引入优化器呢?基于代价的优化器是很聪 ...