【Linux】shell编程(一) 变量
【Linux】shell编程(一) 变量
什么是shell编程
简单的命令可以在命令行中直接输入,但是复杂的命令需要写在脚本里。例如一个简单的shell脚本:
#!/bin/bash
#输出一行
echo "Hello World!"
#开始的行是注释行,空行会被忽略。
如何运行shell脚本
方式一:直接输入脚本的相对路径或绝对路径
./run.sh
- 需要给shell脚本添加可执行权限,否则会报错:Permission denied
方式二:sh+脚本的相对路径或绝对路径
sh ./run.sh
- 不需要添加可执行权限
第一行 #!/bin/bash
第一行叫什么?
WHAT IS THIS LINE CALLED?
This first line (#!/bin/bash or #!/bin/sh) has a name. It is known as ‘she-bang‘(shabang). This derives from the concatenation of the tokens sharp (#) and bang (!). It is also called as sh-bang, hashbang, poundbang or hash-pling. In computing, a she-bang is the character sequence consisting of the characters number sign and exclamation mark (#!) at the beginning of a script.
shabang,由sharp(#)和bang(!)组合而来,必须位于一个脚本的第一行
为什么要加这个,有什么用?
In Unix-like Operating Systems when a script starting with a she-bang(#!) is executed as a program, the program loader parses the rest of the script’s initial line as a interpreter-directive. Thus the specified interpreter program is run instead, passing to it as an argument the path that was used initially through the script.
In simple words, the she-bang at the head of the script tells the system that this file is a set of commands to be fed to the command interpreter indicated. Unix-like operating systems has variety of shells and each of script header lines call a different command interpreter.
如果shell看到第一行是shabang,shell就知道这个文件是一个shell脚本,并按照shabang的指引到/bin/bash找到指定的shell解释器,然后把文件中的命令传给shell。
解释器可以是bash,也可以是csh等等。
SOME she-bang EXAMPLES
*#!/bin/sh :Executes the script using the Bourne shell or a compatible shell, with path /bin/sh*
*#!/bin/bash :Executes the script using the Bash shell.*
*#!/bin/csh -f :Executes the script using C shell or a compatible shell.*
*#!/usr/bin/perl -T :Executes the script using perl with the option of taint checks*
*#!/usr/bin/env python :Executes the script using python by looking up the path to the python interpreter automatically from the environment variables*
shell的变量
变量的赋值和使用
#!/bin/bash
#将一个字符串赋给变量A
LOG="monday"
echo "The value of logfile is:"
#美元符号用于变量替换
echo $LOG
运行结果:
$ sh ./variable.sh
The value of logfile is:
monday
变量的赋值:
- 变量赋值时,等号两边都不能打空格
- 变量名可以由字母、数字和下划线组成,但是不能以数字开头
- 变量名称一般为大写(代码规范,不是语法要求)
变量的使用:
- 当需要使用变量时,要用$对变量进行替换。BASH中,美元符号"$"用于对一个变量进行解析,shell在碰到$引导的变量时,会自动将其换成这个变量的值。
变量作用范围
变量只在其所在脚本有效。
source可以强行让一个脚本影响其父环境
$ source variable.sh
The value of logfile is:
monday
$ echo $LOG
monday
与之相反,export可以让脚本影响其子shell环境
$ export count=5 ##输出变量count
$ bash ##启动子shell
$ echo $count
5
$ exit ##回到先前的shell中
exit
使用unset可以注销变量
unset log
变量替换
$用于解析变量,如果要输出这个符号,需要使用转义字符'\'
$ LOG='Monday'
$ echo
shell提供了花括号"{}"来限定一个变量的开始和结束。当需要紧跟变量输出字母后缀时,必须使用这个功能
$ WORD='big'
$ echo "This apple is ${WORD}ger"
This apple is bigger
位置变量
可以向shell脚本传命令行参数,shell脚本中使用以数字命名的变量来存放这些参数,称为位置变量。
简单地说,第一个位置变量存放在$1,第二个存放在$2,以此类推。当变量数量超过10个时,需要加花括号把数字括起来。例如${10},${23}等。
$0用于存放脚本自己的名字。
!#/bin/bash
echo "\$0 = *$0*"
echo "\$1 = *$1*"
echo "\$2 = *$2*"
echo "\$3 = *$3*"
运行结果:
$ sh ./diaplay_para.sh first second
$0 = *display_para.sh*
$1 = *firsh*
$2 = *second*
$3 = ** ##不存在第三个变量,所以为空
除了以数字命名的变量外,shell还提供了另外三个位置变量:
- $*:包含参数列表
- $@:包含参数列表,同上
- $#:包含参数的个数
#!/bin/bash
#显示有多少个参数需要列出
echo "The number of parameter is $#"
for para in $@
do
echo $para ##也可以写成 echo "$para"
done
运行结果:
$ sh ./list_para.sh first second
The number of parameter is 2
first
second
BASH引号规则
shell脚本中可以使用的引号有以下三种:
- 双引号:阻止Shell对大多数特殊字符(例如#)进行解释。但“$”、"`"和"""仍然保持其特殊含义
- 单引号:阻止Shell对所有字符进行解释
- 倒引号:"``",这个符号通常位于键盘Esc键的下方。当用倒引号括起一个Shell命令时,命令会被执行,并将执行后的结果作为表达式的值。
#!/bin/bash
LOG=Saturday
echo "Today is $LOG"
echo 'Today is $LOG'
echo "Today is `date`"
echo 'Today is `date`'
运行结果:
Today is Saturday
Today is $LOG
Today is Thu Jun 8 17:37:43 CST 2023
Today is `date`
小结
- 运行Shell脚本:sh+脚本的相对路径或绝对路径。
- 第一行的"#!/bin/bash"是shabang(sharp bang),表明Shell解释器的路径。有Shabang的文件运行时会被自动识别成Shell脚本。
- 变量赋值时,等号两边不能有空格。
- $符号后面的变量会被自动替换成变量的值。
- 数字命名的变量表示传入的位置变量,如$1, ${12}。"$@"和"$*"表示位置变量列表,"$#"表示位置变量的数量。
- 双引号阻止大多数字符解析,单引号阻止所有字符解析,倒引号执行命令并作为表达式的值。
【Linux】shell编程(一) 变量的更多相关文章
- Linux Shell编程、变量、控制语句
为什么要学习Shell编程 1)Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理. 2)对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些 ...
- Linux —— Shell编程之变量赋值和引用
Linux的shell编程是一种非常成熟的编程语言,它支持各种类型的变量.有三种主要的变量类型:环境变量.内部变量和用户变量. 环境变量(environment variable)是系统环境的一部分, ...
- linux shell编程之变量和bash配置文件(第一篇)
编程语言有两类 强类型:如C语言.数据具有其特定的类型,先声明定义后才能使用.数据运算时必须符合类型要求(如不能把字符串类型数据直接与整型数据做算数运算) 弱类型:如shell.数据默认为字符型,不用 ...
- Linux学习——shell编程之变量
shell编程之变量:Linux shell编程基础中的变量. 包括Bash变量的分类和各变量的详细使用,如:用户自定义变量.环境变量.语系变量.位置参数变量和预定义变量. 1:什么是Bash变量? ...
- linux —— shell 编程(文本处理)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 基本文本处理 流编辑器sed aw ...
- linux —— shell 编程(编程语法)
导读 本文为博文linux —— shell 编程(整体框架与基础笔记)的第4小点的拓展.(本文所有语句的测试均在 Ubuntu 16.04 LTS 上进行) 目录 再识变量 函数 条件语句 循环语句 ...
- linux shell编程总结
linux shell编程总结 本周学习了unix/linux shell编程,参考的是<LINUX与UNIX Shell 编程指南>,David Tansley著:徐焱,张春萌等译,由机 ...
- Linux Shell编程参考大全
本文记录Linux Shell编程中常用基本知识,方便快速入门以及查询使用. 本文主要分为以下几个部分: 一.Shell中的变量 任何编程语言中,有关变量的定义,作用范围,赋值等都是最最基础的知识. ...
- Linux Shell编程中的几个特殊符号命令 & 、&& 、 ||
https://blog.csdn.net/hack8/article/details/39672145 Linux Shell编程中的几个特殊符号命令 & .&& . || ...
- linux shell 编程参考
#!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...
随机推荐
- R语言文本数据挖掘(二)
tm文本挖掘示例 文本挖掘是从非结构化的文本信息中抽取潜在的.用户感兴趣的重要模式或知识的过程,可以把它看作数据挖掘或数据库中知识发现的延伸.对文本信息的挖掘主要是以数理统计学和计算语言学为理论基础, ...
- 随机服务系统模拟—R实现(二)
M/M/1随机服务系统的模拟 M/M/1模型是一种出生-死亡过程,此随机过程中的每一个状态代表模型中人数的数目.因为模型的队列长度无限且参与人数亦无限,故此状态数目亦为无限.例如状态0表示模型闲置.状 ...
- 10.CAS实现单点登录
1.总结: 昨天主要是了解和编写了CAS实现单点登录的代码: CAS实现单点登录的流程:用户访问资源服务器,先跳转到验证服务器验证身份通过后,认证服务器发送一个ticket给用户,用户拿着ticket ...
- 和我一起学 Three.js【初级篇】:1. 搭建 3D 场景
欢迎关注「前端乱步」公众号,我会在此分享 Web 开发技术,前沿科技与互联网资讯. 0. 系列文章合集 本系列第 6,7 章节支持微信公众号内付费观看,将在全系列文章点赞数+评论数 >= 500 ...
- Android开发_记事本(1)
一些知识 Textview TextView中有下述几个属性: id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行 ...
- day07-OpenFeign-服务调用
SpringCloud OpenFeign-服务调用 1.OpenFeign介绍 https://github.com/spring-cloud/spring-cloud-openfeign Open ...
- day134:2RenMJ:TypeScript的抽象类&装饰器&命名空间&模块&编译配置文件&python中的类型注解
目录 1.抽象类 2.装饰器 3.命名空间 4.模块 5.编译配置文件 6.python的类型注解 1.抽象类 抽象类(abstract class)做为其它派生类的基类使用. 它们一般不会直接被实例 ...
- Dotnet初探: 尝试使用 dotnet6 的miniapi
引子 最近我们学校要求我们使用dotnet实现一个登录功能,由于我们学校的教程老旧(万年经典asp .net 4.x,慢的要死),我看有高性能又免费的Dotnet6不用,还又要退回几年前,于是决定另开 ...
- Vue3实现组件级基类的几种方法
Vue3的组件有三种代码组织方式 纯Option API (不含setup) option API + setup 纯 setup (即composition API) 对于这三种形式,设置基类的方法 ...
- html5和css3基础学习笔记
网页简介 一个页面包括结构.表现.行为三个部分. 结构:HTML用于描述页面的结构. 表现:CSS用于控制页面中元素的样式. 行为:JavaScript用于响应用户操作. 第一部分 HTML 5(Hy ...