Shell学习(二)——变量和基本数据类型
参考博客:
[1]LinuxShell脚本——变量和数据类型
[2]shell只读变量删除
一、变量
定义变量的语法
定义变量时,变量名和变量值之间使用“=”分隔,并且等号两边不能有空格:
变量名=变量值 变量名规则
变量名的定义必须遵循以下规则:
1 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
2 中间不能有空格,可以使用下划线。
3 不能使用标点符号。
4 不能使用bash里的关键字。 使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,建议将变量名使用 {} 括起来之后再添加美元符号:
echo ${name} 修改变量为只读
使用readonly命令可以将变量定义为只读变量,只读变量的值不能被改变,也不能被删除:
readonly name 删除变量
使用unset命令可以删除变量,但不能删除只读变量:
unset name 位置参数
运行Shell脚本文件时我们可以给它传递一些参数,这些参数在脚本文件内部可以使用 $n 的形式来接收。例如: $1 表示第一个参数, $2 表示第二个参数,依次类推。
如果参数个数达到或者超过了10个,那么就得用 ${n} 的形式来接收了,例如: ${10} 、 ${23} 。 {} 的作用是为了帮助解释器识别参数的边界,这跟使用变量时加 {} 是一样的效果。 脚本内容:
#!/bin/bash
echo "第一个参数 : $1"
echo "第二个参数 : $2"
脚本调用:
[root@localhost ~]# sh test.sh A B
执行结果:
第一个参数 : A
第二个参数 : B 特殊变量
除了位置参数以外,Shell中还有一些特殊变量,这些特殊变量描述了传入参数的某些信息:
1 $0:当前脚本的文件名。
2 $n:n是一个数字,表示第几个参数。
3 $#:传递给脚本或函数的参数个数。
4 $*:传递给脚本或函数的所有参数。当被双引号""包含时,会将所有的参数从整体上看做一份数据,而不是把每个参数都看做一份数据。
5 $@:传递给脚本或函数的所有参数。当被双引号""包含时,仍然将每个参数都看作一份数据,彼此之间是独立的。。
6 $?:上个命令的退出状态,或函数的返回值。
7 $$:当前Shell的进程ID。对于Shell脚本,就是这些脚本所在的进程ID。
二、数据类型
1、字符串
字符串是shell编程中最常用最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号。
建议使用双引号,因为双引号里可以有变量和特殊字符,可以按照变量和特殊字符去使用。 声明字符串类型的变量:
name="Sam"
拼接字符串:
hello="hello, $name !"
2、整数型
在Shell中所有的变量默认都是字符串型。也就是说,如果不手工指定变量的类型,那么所有的数值都是不能进行运算的:
[root@localhost ~]# a=1
[root@localhost ~]# b=2
[root@localhost ~]# c=$a+$b
[root@localhost ~]# echo $c
1+2
如果想要进行数学运算,可以使用“$((运算式))”或“$[运算式]”方式运算:
[root@localhost ~]# echo $(($a+$b))
3
[root@localhost ~]# echo $[$a+$b]
3
3、数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。用括号来表示数组,数组元素用空格符号分割开。定义数组的一般形式为:
数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。 声明数组类型的变量:
数组名=(值1 值2 ... 值n)
也可以通过指定下标来声明:
数组名[下标]=值
获取数组指定下标的值:
${数组名[下标]}
使用“@”符号可以获取数组中的所有元素:
${数组名[@]}
Shell学习(二)——变量和基本数据类型的更多相关文章
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- shell学习之变量、判断、重复动作
1.1 环境以及变量的定义.赋值.展开.删除 export:将一个变量导入到环境中:export PATH=$PATH:/home. readonly 讲一个变量设置为只读模式,在shell脚本中定义 ...
- mysql学习二、SQL常用数据类型
一.常用数据类型 二.选择数据类型的原则: 1 业务需要 2 满足第一个条件下,需要存储空间最小的. 三.常用的选择数据类型思路:
- linux shell学习二
参考:http://www.cnblogs.com/waitig/p/5531463.html Shell注释 Shell中的注释以“#”号开头,所有以“#”号开头的代码都会被解释器所忽略. 比如下面 ...
- less学习二---变量
less中声明的变量可以存储css属性值,还可以存储选择器,属性名,url以及@imporant等 变量声明及赋值格式:@variableName : varableValue ; //属性值 //l ...
- linux shell 学习笔记--变量声明与赋值,循环
Bash 变量是不分类型的 ------------------------ 不像其他程序语言一样,Bash 并不对变量区分"类型".本质上,Bash 变量都是字符串. 但是依赖于 ...
- Shell学习(二)Shell变量
一.Shell变量 变量的定义 例子: my_job="Learn Shell" PS:变量名和等号之间不能有空格!!! 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头 ...
- Shell学习之Bash变量详解(二)
Shell学习之Bash变量详解 目录 Bash变量 Bash变量注意点 用户自定义变量 环境变量 位置参数变量 预定义变量 Bash变量 用户自定义变量:在Bash中由用户定义的变量. 环境变量:这 ...
- 【转】shell学习笔记(二) ——shell变量
在shell中有3种变量:系统变量,环境变量和用户变量,其中系统变量在对参数判断和命令返回值判断时会使用,环境变量主要是在程序运行时需要设置,用户变量在编程过程中使用量最多. 1 系统变量 变量名 ...
- Shell学习小结 - 深入认识变量
移动端访问不佳,请访问我的个人博客 变量的命名 对于初学者来说,可以简单的理解为,变量就是保存在计算机内存中的一系列的键值对. 列如: str="hello" 这里的str就是变量 ...
随机推荐
- 关于dns服务工作的原理,和配置的细节理解。
dns服务器相关 1,dns原理,也就是迭代,和递归查询.将域名解析为ip的过程. 一次完整的查询请求经过的流程: Client -->hosts文件 -->DNS Service Loc ...
- Spring源码学习之容器的基本实现(一)
前言 最近学习了<<Spring源码深度解析>>受益匪浅,本博客是对学习内容的一个总结.分享,方便日后自己复习或与一同学习的小伙伴一起探讨之用. 建议与源码配合使用,效果更嘉, ...
- Awesome metaverse projects (元宇宙精选资源汇总)
Awesome Metaverse 关于 Metaverse 的精彩项目和信息资源列表. 由于关于 Metaverse 是什么存在许多相互竞争的想法,请随时以拉取请求.问题和评论的形式留下反馈. We ...
- C++11 多线程同步 互斥锁 条件变量
在多线程程序中,线程同步(多个线程访问一个资源保证顺序)是一个非常重要的问题,Linux下常见的线程同步的方法有下面几种: 互斥锁 条件变量 信号量 这篇博客只介绍互斥量和条件变量的使用. 互斥锁和条 ...
- JavaScript 简单介绍
一.简介 JavaScript是一门面向对象的动态语言,他一般用来处理以下任务: 修饰网页 生成HTML和CSS 生成动态HTML内容 生成一些特效 提供用户交互接口 生成用户交互组件 验证用户输入 ...
- Git撤销、回滚操作
git的工作流 工作区:即自己当前分支所修改的代码,git add xx 之前的!不包括 git add xx 和 git commit xxx 之后的. 暂存区:已经 git add xxx 进去, ...
- mysql-5.7.30安装
1.由于在线安装受制于网络环境,所以选择tar包编译安装. 首先去mysql镜像站下载mysql-5.7.30-linux-glibc2.5-x86_64.tar.gz2.上传到linux服 ...
- c++学习笔记目录
chapter name menu 一 从c到c++ 1.引用2.const关键词的用法3.动态内存分配4.内联函数5.函数重载6.函数的缺省参数7.结构化程序设计的不足8.面向对象的程序设计 二 类 ...
- Django笔记&教程 6-3 使用模型(models)创建表单(form)
Django 自学笔记兼学习教程第6章第3节--使用模型(models)创建表单(form) 点击查看教程总目录 本文参考:Forms for models 1 - 初步介绍 很多时候,我们使用的表单 ...
- LRU缓存
LRU缓存 struct Node{ int key; int value; Node* next; Node* pre; Node(): key(-1), value(-1), next(nullp ...