三种变量:

  1. 局部变量:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量:所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量:shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行
#!/bin/bash
# 第一个脚本测试
echo "第一个脚本测试"
echo "Are you ready? 输入"
read readin
echo "输入为"
echo $readin
echo ""
xxx1="I love you"
echo $xxx1
xxx2='I love you'
echo $xxx2
xxx3=I_love_you
echo "Tomorrow, I would say '${xxx3}!' to you" #[代码1]
unset xxx3 #[代码2]
echo $xxx3
xxx4='test: ${xxx1}' #使用单引号 [代码3]
echo $xxx4
xxx4="test: ${xxx1}" #使用双引号,重新赋值xxx4 [代码4]
echo $xxx4
readonly xxx4 #将变量定义为只读变量 [代码5]
xxx4="True" #试图改变只读变量,报错 [代码6]
unset xxx4 #试图删除只读变量,报错 [代码7]

输出结果如下

第一个脚本测试
Are you ready? 输入
y
输入为
y
#输出"",为空
I love you #[代码1]
I love you #[代码2]
Tomorrow, I would say 'I_love_you!' to you #[代码1]
#无任何输出,[代码2]体现
test: ${xxx1} #[代码3]
test: I love you #[代码4]
./test.sh: 行 22: xxx4: 只读变量 #[代码6]
./test.sh: 第 23 行: unset: xxx4: 无法取消设定: 只读 variable #[代码7]

第1行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell;后面的/bin/bash就是指明了解释器的具体位置。

第2行的#及其后面的内容是注释。

第3行的 echo 命令用于向标准输出文件,输出文本。使用echo输出命令时,可使用echo "xxxx"直接输出;若要输出变量要使用echo $xxx(xxx为变量名)。

定义、使用和修改变量

1. 定义变量

Shell 支持以下三种定义变量的方式:

variable=value
variable='value'
variable="value"

注意,赋值号=的周围不能有空格。

variable 是变量名,value 是赋给变量的值。如果 value 不包含任何空白符(例如空格、Tab 缩进等),那么可以不使用引号;如果 value 包含了空白符,那么就必须使用引号包围起来。

使用单引号和使用双引号也是有区别的。单引号[代码3],双引号[代码1][代码4]

项目 功能
单引号 原样输出,定义显示纯字符串,变量无效。
双引号 定义字符串中附带有变量和命令并且想将其解析后再输出的变量。

2. 使用变量

使用一个定义过的变量,只要在变量名前面加美元符号$即可:echo $xxxecho ${xxx};变量名外面的花括号{ }是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,如下第6行。

3. 修改变量

如果要修改变量,可以重新赋值。

4. 将命令的结果赋值给变量

Shell 也支持将命令的执行结果赋值给变量,常见的有以下两种方式:

第一种:用反引号``包围 第二种:用$()包围
variable=`command` variable=$(command)
不推荐:反引号和单引号非常相似,容易产生混淆 推荐:区分明显

例如,在当前文件夹下有test.txt文件,并使用cat命令读取,如下(结果相同)。

haveALook=$(cat test.txt)
echo $haveALook
haveALook=`cat test.txt`
echo $haveALook

5. 只读变量

readonly xxxxx(xxxxx为变量名),只读变量的值不能被改变。[代码5][代码6][代码7]

6. 删除变量

使用 unset 命令可以删除变量:unset xxxxx[代码2]

执行脚本

使用chmod +x xxx.shchmod 755 xxx.sh为脚本添加执行权限。

执行脚本时,在脚本所在目录输入./xxx.sh执行脚本。./表示当前目录,整条命令的意思是执行当前目录下的 xxx.sh 脚本。如果不写./,Shell会到系统路径(由 PATH 环境变量指定)下查找。

类似,source 命令也可读取并在当前环境中执行脚本,同时还可返回脚本中最后一个命令的返回状态;如果没有返回值则返回 0,代表执行成功;如果未找到指定的脚本则返回 false。

Shell脚本的学习笔记一:变量的更多相关文章

  1. Linux Shell脚本编程学习笔记和实战

    http://www.1987.name/141.html shell基础 终端打印.算术运算.经常使用变量 Linux下搜索指定文件夹下特定字符串并高亮显示匹配关键词 从键盘或文件里获取标准输入 [ ...

  2. Mac下Shell脚本使用学习笔记(二)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 (7)Shell echo命令: 命令格式:echo string ①显示普通字符串:echo "It is a ...

  3. Mac下Shell脚本使用学习笔记(一)

    参考文献 Shell 教程 MAC常用终端命令行 Mac下Shell脚本使用 1.使用终端创建test.sh: (1)进入指定文件夹路径(命令示例:cd Desktop/面向对象程序设计): (2)创 ...

  4. shell脚本编程学习笔记(一)

    一.脚本格式 vim shell.sh #!/bin/bash //声明脚本解释器,这个‘#’号不是注释,其余是注释 #Program: //程序内容说明 #History: //时间和作者 二.sh ...

  5. Shell脚本的学习笔记二:字符串

    菜鸟教程提供的Shell在线编辑器 Shell 字符串 项目 功能 单引号 原样输出,变量无效.但可用成对单引号嵌套成对单引号输出变量 双引号 定义字符串中附带有变量的命令并且想将其解析后再输出的变量 ...

  6. Shell脚本入门学习笔记

    1.shell操作系统和用户之间.负责解释命令行 2./etc/shells 记录登录系统有效支持shell 3./etc/passwd 最后,有人谁可以看到用户的默认shell 4.直接输入shel ...

  7. shell脚本编程学习笔记(三)编写邮件报警脚本

    一.shell编写邮件报警脚本 1.POSTFIX邮件服务器准备 a.首先卸载服务器上自带的sendmail rpm -qa sendmail* //查看安装的sendmail rpm -e send ...

  8. shell脚本编程学习笔记(四)shell操作数据库

    一.数据库基本操作 1)登录mysql服务器:mysql -u root -p 密码 2)查看数据库:show databases 3)查看表:show tales from db; 4)查看表结构: ...

  9. shell脚本编程学习笔记(二)linux服务器启动流程

    一.linux服务器启动流程 1.bios找到磁盘上的mbr主引导扇区 2.进入grub洁面选择相应的启动内核 3.读取kernel内核文件-/boot/vmlinuz-* 4.读取init的镜像文件 ...

随机推荐

  1. androidstudio项目如何使用git版本回退

    使用android studio 编写代码错误,有时可能会需要将项目版本回退到以前的某个版本上,这对于很多刚使用git的网友来说操作可能不是很懂,下面为大家整理了android studio 回退已经 ...

  2. week_one-python用户登录

    作业:编写登陆接口 输入用户名密码认证成功后显示欢迎信息输错三次后锁定 1.先创建锁文件account_lock.txt,内容可以为空2.再创建用户密码信息文件account.txteg.wo 123 ...

  3. Navigation包中的move_base和amcl实现自动驾驶

    安装功能包: 1.安装导航定位包navigation $ sudo apt-get install ros-indigo-navigation 2.由于导航包在/cmd_val下发布的移动数据加速度会 ...

  4. Spring Data Solr入门

    如何将Solr的应用集成到Spring中? SpringDataSolr就是为了方便Solr的开发所研制的一个框架,其底层是对SolrJ的封装. SpringDataSolr入门小Demo 首先目录结 ...

  5. nmon监控数据分析

    性能测试中,各个服务器资源占用统计分析是一个很重要的组成部分,通常我们使用nmon这个工具来进行监控以及监控结果输出. 一. 在监控阶段使用类似下面的命令 ./nmon -f write_3s_20v ...

  6. [C++ Primer Plus] 第6章、分支语句和逻辑运算符(二)课后习题

    一.复习题 3. #include<iostream> using namespace std; void main() { char ch; int c1, c2; c1 = c2 = ...

  7. Bugku-CTF之Web5(JSPFUCK??????)

    Day10 web5 JSPFUCK??????答案格式CTF{**} http://123.206.87.240:8002/web5/ 字母大写    

  8. vijos 1605 双栈排序 - 贪心 - 二分图

    题目传送门 传送门I 传送门II 题目大意 双栈排序,问最小字典序操作序列. 不能发现两个数$a_{j}, a_{k}\ \ (j < k)$不能放在同一个栈的充分必要条件时存在一个$i$使得$ ...

  9. version control的简单认知

    version control 版本控制是一种记录文件或文件集随时间变化的系统,以便您以后可以调用特定版本.对于本书中的示例,您将使用软件源代码作为受版本控制的文件,但实际上您可以使用计算机上的几乎任 ...

  10. 大项目小细节---onbeforeunload增强用户体验

    微信公众平台编辑数据页面,点击浏览器回退按钮.刷新按钮(包括F5.Ctrl+R).关闭页面.点击其他超链接等操作的时候,会提示弹窗提示. 为增加用户体验,我们也增加类似功能. 代码如下: @if (R ...