继续学习Shell脚本(详细)
一、变量
定义一个变量例子:
name=xintiaobao
number=100
注意: 1,变量名和等号之间不能有空格;
2,首个字符必须为字母(a-z,A-Z)。
3, 中间不能有空格,可以使用下划线(_)。
4, 不能使用标点符号。
5, 不能使用bash里的关键字
使用变量:
只需要在一个定义过的变量前面加上美元符号 $ 就可以了, 另外,对于变量的{} 是可以选择的, 它的目的为帮助解释器识别变量的边界.
举个例子:
name="xintiaobao"
echo $name
echo ${name}
echo "my name is ${name}!"
运行
xintiaobao
xintiaobao
my name is xintiaobao!
重定义变量: 直接把变量重新像开始定义的那样子赋值就可以了:
name="xintiaobao"
name="zhangx"
只读变量: 用 readonly 命令 可以把变量字义为只读变量。
readonly name="xintiaobao"
删除变量: 使用unset命令可以删除变量,但是不能删除只读的变量。用法:
unset variable_name
变量类型
运行shell时,会同时存在三种变量:
1) 局部变量
局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
2) 环境变量
所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
3) shell变量
shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
特殊变量:
* 和 @ 的区别为: * 和 @ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"1" "n" 的形式输出所有参数。但是当它们被双引号(" ")包含时,"1 2 … n"的形式输出所有参数;"1" "
$? 可以获取上一个命令的退出状态。所谓退出状态,就是上一个命令执行后的返回结果。退出状态是一个数字,一般情况下,大部分命令执行成功会返回 0,失败返回 1。
二、Shell中的替换
转义符: 在echo中可以用于的转义符有:
使用 echo 命令的 –E 选项禁止转义,默认也是不转义的; 使用 –n 选项可以禁止插入换行符;
使用 echo 命令的 –e 选项可以对转义字符进行替换。
命令替换:
它的意思就是说我们把一个命令的输出赋值给一个变量,方法为把命令用反引号(在Esc下方)引起来. 比如:
directory=`pwd`
echo $directory
运行得到当前的目录
/xx/xx/xx/test
变量替换:
可以根据变量的状态(是否为空、是否定义等)来改变它的值.
举个例子说明下${var:-word}:
name="xintiaobao"
echo ${name:-1}
运行得到
xintiaobao
#name="xintiaobao"
echo ${name:-1}
运行得到
1
举个例子说明下${var:=word}:
name=""
echo ${name:=zhangx}
echo $name
运行结果为
zhangx
zhangx
说明name为空时,name被替换.
三、Shell运算符
算数运算符: 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr. 下面使用expr进行; expr是一款表达式计算工具,使用它可以完成表达式的求值操作;
举个例子
a=10
b=20
expr $a + $b
expr $a - $b
expr $a * $b
expr $a / $b
expr $a % $b
运行结果
30
-10
200
0
10
注意: 1. 在expr中的乖号为:*
2. 在 expr中的 表达式与运算符之间要有空格,否则错误;
3. 在[ a == b ]与[ a != b ]中,要需要在方括号与变量以及变量与运算符之间也需要有括号, 否则为错误的。
关系运算符:
只支持数字,不支持字符串,除非字符串的值是数字。常见的有:
注意:也别忘记了空格;
布尔运算符:
字符串运算符:
文件测试运算符:
检测 Unix 文件的各种属性。
- Message和handler传递对象
- MVC RC2中关于HtmlHelper给DropDownList设置初始选中值的问题
- 结构struct(值类型)在实际应用要注意的二点:
- 王璋:腾讯云为游戏行业提供解决方案
- 利用Reflector把"闭包"看清楚
- CSS伪类的三种写法
- 吴晓斌:"吃鸡"游戏全球多地部署架构分析
- silverlight + wcf(json格式) + sqlserver存储过程分页
- 联众收购多家公司 多枚域名齐助阵
- Android AlertDialog去除黑边白边自定义布局(转)
- “超自然”域名近139万易主
- 服务器磁盘监控脚本分享(含报警邮件)
- 通用分页存储过程
- 你真的会玩SQL吗?表表达式,排名函数
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Anaconda使用命令
- 最大连续子数组
- markdown编辑器实现代码高亮
- LeetCode - 198 简单动态规划 打家劫舍
- Jaskson精讲第7篇-JsonTypeInfo注解在类继承关系下的使用
- 《剑指Offer 1.二维数组中的查找》2019-03-25
- Elasticsearch:Dynamic mapping
- 设计模式《单例设计模式》
- 《0-1 背包问题》
- 使用分治思想 求数组中的最大和最小值
- python 入门笔记[语法基础(下)]
- Java 成员变量和属性的区别
- xmuC语言程序实践week 1 大作业
- 《01-背包问题-点菜》
- 模拟赛 2018 Benelux Algorithm Programming Contest (BAPC 18)(部分题)