Linux —— Shell编程之变量赋值和引用
Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量。有三种主要的变量类型:环境变量、内部变量和用户变量。
- 环境变量(environment variable)是系统环境的一部分,不必去定义它们。可以在shell程序中使用它们,某些变量(比如PATH)还能在shell中加以修改。
- 内部变量(built-in variable)是由系统提供的。与环境变量不同,你不能修改它们。
- 用户变量(user variable)是你在编写shell脚本时定义的。可以在shell程序内任意使用它们和修改它们。
shell编程和其他编程语言的主要不同之处是:在shell编程中,变量是非类型性质的。也就是说,不必指定变量是数字还是字符串。
用户变量
Shell编程中,使用用户变量无需事先声明,同时变量名的命名须遵循如下规则:
1). 首个字符必须为字母(a-z,A-Z);
2). 中间不能有空格,可以使用下划线(_) ;
3). 不能使用标点符号 ;
4). 不能使用bash里的关键字(可用help命令查看保留关键字) 。
变量赋值
变量赋值的格式:
变量名=值
访问变量值
要取用一个变量的值,只需在变量名前面加一个$ 。
( ATTENTION: Don't keep blank between the variable with the equal operator '=' )
举例
#!/bin/bash
# 对变量赋值:
a="hello world" #等号两边均不能有空格存在
# 打印变量a的值:
echo -e "A is: $a\n"
备注:
1). bash中变量赋值,等号两边均不能有空格存在;
使用自己喜欢的编辑器,输入上述内容,并保存为文件test_hello.bsh,然后执行 chmod +x test_hello.bsh使其具有执行权限,最后输入 ./test_hello或bash test_hello.bsh执行该脚本。
程序运行结果:
A is: hello world
有时候变量名可能会和其它文字混淆,比如:
num=1
echo "this is the $numst"
上述脚本并不会输出"this is the 1st"而是"this is the ";
这是由于shell会去搜索变量numnd的值,而实际上这个变量并未赋值。
我们可以用花括号来告诉shell把num变量跟其他部分分开:
num=1
echo "this is the ${num}st"
程序运行结果:
this is the 1st
位置参数
可以编写一个shell脚本,当从命令行或者从其他shell脚本中调用它的时候,这个脚本接受若干参数。这些选项是通过Linux作为位置参数
(position
parameter)提供给shell程序的。位置参数有由系统给出的专用名。存放在变量中的第一个参数名为1(数字1),在程序内可以使用$1来访问;
存放在变量中的第二个参数名为2,在程序中可以使用$2来访问,依此类推。在调用shell程序时,可以省略一个或几个数字大的位置 参数。
例如,如果shell程序mypgm1要求两个参数(比如名字和姓氏),那么可以只用一个参数(名字)来调用这个shell程序。但是,你不能只用第二个参数(姓氏)来调用shell程序。
- #!/bin/bash
- #name display program
- if [ $# -eq 0 ]; then
- echo "Name not provided."
- else
- echo "Your name is $1."
- fi
在bash中,可以像下面 这样执行mypgm1:
- # . mypgm1
那么会得到下面的输出:
Name not provided.
但是,如果像下面这样执行mypgm1:
- # . mypgm1 david
那么会得到下面的输出:
Your name is david.
shell程序mypgm1还说明了shell编程的另一个方面,即内部变量。在mypgm1中,变量$#是一个内部变量,它提供传送给这个shell程序的位置参数的数量。
内部变量
内部变量是Linux所提供的一种特殊类型的变量,这类变量在程序中用来作出判断。在shell程序内这类变量的值是不能修改的。
部分内部变量总结如下:
表 1.1. 常用内部变量
$0 |
相当于C语言main 函数的argv[0] |
$1 、$2 ... |
这些称为位置参数(Positional Parameter),相当于C语言main 函数的argv[1] 、argv[2] ... |
$# |
相当于C语言main 函数的argc - 1 ,注意这里的# 后面不表示注释 |
$@ |
表示参数列表"$1" "$2" ... ,例如可以用在for 循环中的in 后面。 |
$? |
上一条命令的Exit Status |
$$ |
当前Shell的进程号 |
为了说明这些变量的用法,这里有一个叫做mypgm2的示范程序:
- #!/bin/bash
- #my test program
- echo "Number of parameter is $#"
- echo "Program name is $0"
- echo "Parameters as a single string is $*"
在bash中,如果从命令行上执行mypgm2,如下所示:
- # . mypgm2 David Victor
那么会得到下面的结果:
- Number of parameters is 2
- Program name is mypgm2
- Parameters as a single string is David Victor
Linux —— Shell编程之变量赋值和引用的更多相关文章
- Linux Shell编程、变量、控制语句
为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...
- linux shell编程之变量和bash配置文件(第一篇)
编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...
- shell编程之变量赋值
1.变量赋值: name=lbg 等号前后不能有空格 name="Lebron James" 变量值中有空格要用双引号 echo ${name} 用${}更保险 shopt -s ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- 一文学完Linux Shell编程,比书都好懂
一. Shell 编程 1. 简介 Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务. Shell 既是一种命令语言,又是一种程序设计语言. Shell scr ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
- Linux Shell编程参考大全
本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...
随机推荐
- python中自定义类对象json字符串化的方法
1. 用 json 或者simplejson 就可以 2.定义转换函数: def convert_to_builtin_type(obj): print 'default(', repr(obj), ...
- sem_timedwait的用法
#include <semaphore.h> int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout); Link ...
- Python多进程(multiprocessing)
Unix/Linux操作系统提供了一个fork()系统调用,它非常特殊.普通的函数调用,调用一次,返回一次,但是fork()调用一次,返回两次,因为操作系统自动把当前进程(称为父进程)复制了一份(称为 ...
- PC-CSS-默认字体样式
字体样式:Arial:字体大小:12px;行高:1.5倍:
- CBitmap,HBitmap,Bitmap区别及联系
加载一位图,可以使用LoadImage: HANDLE LoadImage(HINSTANCE hinst,LPCTSTR lpszName,UINT uType,int cxDesired,int ...
- linux下git使用记录1 git 提交
linux下git使用记录1 浏览:985 发布日期:2013/08/08 分类:技术分享 在使用github的时候,不可避免的接触到了git,用他来更新项目,做版本控制.这里特别把常用的命令记录 ...
- [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写
第十七章 使用BIOS进行键盘输入和磁盘读写 17.1 int 9 中断例程对键盘输入的处理 17.2 int 16 读取键盘缓存区 mov ah,0 int 16h 结果:(ah)=扫描码,(al) ...
- HTML5-常见的事件- beforeunload事件
当我们在日常访问某些网站时,关闭当前网页时出现如下提示: beforeunload 事件就可以完成这样的事情,该事件发生时机:页面卸载之前,可以通过它来取消卸载并继续使用原有页面. 为了显示上面弹出对 ...
- SQL Server无法打开用户默认数据库,登录失败,用户‘sa’登录失败,错误:4064的解决方法
用windows验证方式进入Management Studio, 安全性 > 用户名 > 右击sa > 属性 > 把默认数据库选“master”
- C++服务器设计(零):总体设计
这个系列把毕业论文的部分贴了出来,以作保存留念.整个系列分为三大部分,其中第一章到第三章是介绍服务器的系统层设计,设计思路参考了libevent和muduo等开源代码的实现:第四章到第六章是介绍服务器 ...