Linux基础之bash脚本编程初级-变量

什么是变量?

变量最初来源于数学,指的是非固定的值可变化的数通常用拉丁字母表示。在计算机中变量它依旧指的是可变化的数,只不过表现形式有些变化。它指的是变量名+所指向的内存空间。

以下实验环境均在CentOS7.2进行



变量的特点

变量分强类型变量,与弱类型变量

强类型变量:变量需事先声明且需提前定义其变量存储格式

弱类型变量:不需事先声明,不需定义变量存储格式。

bash把所有变量统统视作字符型;bash中的变量无需事先声明,相当于,把声明和赋值过程同时实现。

变量名的命名规范

变量名只能包含数字字母下划线,而且不能以数字开头

其命名要求见名知义,命名机制遵循某种法则(驼峰法则)不能使用程序的保留字:if,else,then,while,for...




bash的变量类型及其使用格式

本地变量,环境变量,局部变量,位置参数变量,特殊变量

变量引用格式:$VAR、${VAR}

………………………………………………………………………………………………………………………

本地变量:作用域仅为当前shell进程

变量赋值:name=‘value’

value有如下引用类型

1、直接字符串引用,格式name="CHARS"

[[email protected] ~]# name1=abc
[[email protected] ~]# echo $name1 
abc

2、变量引用,格式:name=“$VAR”

[[email protected] ~]# name2=$SHELL
[[email protected] ~]# echo $name2
/bin/bash

3、命令引用,格式:name=`COMMAND` | name=$(COMMAND)

[[email protected] ~]# name3=`date`
[[email protected] ~]# echo $name3
2016年 08月 14日 星期日 11:16:55 CST
[[email protected] ~]# name3=$(date)
[[email protected] ~]# echo $name3
2016年 08月 14日 星期日 11:17:11 CST

“”:弱引用,其中的变量引用会被替换为变量值;

[[email protected] ~]# name4="$name1"
[[email protected] ~]# echo $name4
abc

‘’:强引用,其中的变量引用不会被替换为变量值,而保持原字符串;

[[email protected] ~]# name5=‘$name1‘
[[email protected] ~]# echo $name5
$name1

命令set用于显示已定义的所有变量

撤销已定义的变量,格式:unset 变量名

[[email protected] ~]# echo $name5
$name1
[[email protected] ~]# unset name5
[[email protected] ~]# echo $name5
[[email protected] ~]#

在刚接触bash变量时特别容易搞错的就是变量的使用格式,有时候该命令引用却忘记加``或$(),还有就是强引用与弱引用的使用时机。

下面以例子说明本地变量的作用范围,使用命令bash进入子shell

[[email protected] ~]# bash
[[email protected] ~]# echo $name1
[[email protected] ~]# exit
exit
[[email protected] ~]# echo $name1
abc

由实验可知,作用域仅为当前shell进程。当然上面实验做的不够完善,因为并没有演示在符父shell中其变量是否有效,大家可以在下面补充实验去验证。

………………………………………………………………………………………………………………………

环境变量:作用域为当前shell进程及子进程

变量赋值:

有四种赋值格式:

1、export name=value

2、name=value

       export name

3、declare -x name=value

4、name=value

       declare -x name

:bash内嵌了许多环境变量(通常全为大写字符),用于定义bash的工作环境

查看/显示环境变量 命令

export

[[email protected] ~]# export | head -5
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="centos7"
declare -x LANG="zh_CN.UTF-8"

declare -x

[[email protected] ~]# export | head -5
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/root"
declare -x HOSTNAME="centos7"
declare -x LANG="zh_CN.UTF-8"

printenv

[[email protected] ~]# printenv | head -5
XDG_SESSION_ID=8
HOSTNAME=centos7
SELINUX_ROLE_REQUESTED=
TERM=linux
SHELL=/bin/bash

env

[[email protected] ~]# printenv | head -5
XDG_SESSION_ID=8
HOSTNAME=centos7
SELINUX_ROLE_REQUESTED=
TERM=linux
SHELL=/bin/bash

上面四个命令虽然显示顺序略有不同但是所包含的内容都是一样的

[[email protected] ~]# env | wc -l
24
[[email protected] ~]# printenv | wc -l
24
[[email protected] ~]# export | wc -l        
24
[[email protected] ~]# declare -x | wc -l      
24

撤销环境变量

格式:unset VAR

下面通过例子验证环境变量的作用范围

[[email protected] ~]# export name6=$name2
[[email protected] ~]# echo $name6
/bin/bash
[[email protected] ~]# bash
[[email protected] ~]# echo $name6
/bin/bash

………………………………………………………………………………………………………………………

局部变量:作用域仅为某代码片段(通常用在函数)

因为函数还没学到,这里不举例子

………………………………………………………………………………………………………………………

位置变量:当执行脚本的shell进程传递的参数

$1,$2,...$(10)...:对应调用第1,第2...第10个参数

………………………………………………………………………………………………………………………

特殊变量:shell内置的特殊功用的变量

$#:传递给脚本参数的个数

$*:传递给脚本的所有参数;各参数读成多个独立字符串

[email protected]:传递给脚本的所有参数;各参数读成一个完整的字符串形式

$?:程序执行状态返回值,0表示正确,1-255表示失败
$0:表示命令本身

下面以一个简单的脚本来给出位置变量与特殊变量的应用

[[email protected] test]# cat var1.sh 
#!/bin/bash
#
echo "$1" 
echo "$2"
echo "$#"
echo "[email protected]"
echo "$*"

上面特殊变量及位置变量均需要结合脚本才能使用。[email protected],$*二者虽然有区别不过在初学时可以

不必在意,当学到一定阶段接触了一定的脚本后自然也就会区分二者的不同了。



算术运算

在未学习bash中的算术运算之前如果要计算从1+...+10需要使用管道将其送入bc计算器来解决,

echo {1..10} | tr ‘ ‘ ‘+‘| bc很麻烦。而使用bash中的算术运算则可以简化代码。

bash中的算术运算格式:有很多种,本文只介绍常用的4种

1)let VAR=算术运算表达式

[[email protected] test]# let sum1=1+10
[[email protected] test]# echo $sum1
11

2)VAR=$[算术表达式]

[[email protected] test]# sum2=$[2+2]
[[email protected] test]# echo $sum2
4

3)VAR=$((算术表达式))

[[email protected] test]# sum3=$((5+5))
[[email protected] test]# echo $sum3
10

4)VAR=$(expr $ARG $OP $ARG2)

[[email protected] ~]# sum4=$(expr 2+8)
[[email protected] ~]# echo $sum4
2+8
[[email protected] ~]# sum4=$(expr 2 + 8 )
[[email protected] ~]# echo $sum4
10

这种是调用expr命令计算后面运算表达式,它要求数值与运算符之间有空格,没有空格则不进行计算,保持运算表达式原本模样赋值给变量。

:它与上述三种不同之处还有如果有乘法运算,乘法符号*在第四种里面需要加\进行转义。

以下为四种算术运算在乘法中的表现

[[email protected] ~]# sum4=$(expr 2 * 8 )
expr: 语法错误
[[email protected] ~]# sum4=$(expr 2 \* 8 )
[[email protected] ~]# echo $sum4
16
[[email protected] ~]# let sum1=6*6
[[email protected] ~]# echo $sum1
36
[[email protected] ~]# sum2=$[2*3]
[[email protected] ~]# echo $sum2
6
[[email protected] ~]# sum3=$((3*4))
[[email protected] ~]# echo $sum3
12

第四种需要转义,其他三种不需要。

时间: 2024-11-29 11:10:24

Linux基础之bash脚本编程初级-变量的相关文章

Linux基础之bash脚本编程初级-逻辑运算与测试

引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试有分:数值测试.字符串测试.文件测试. 组合测试则有两种表达方式.具体是什么表达方式在文章中会有具体展示. 本文实验环境为CentOS7.2 Linux中为什么要学习测试(判断)? 当我第一次学习这部分内容时,觉得好难,好不爽.可是这又是想要继续学习Linux必须要掌握的知识点.为什么?我们在生活中面对各种选择时总要问问自己,我是否应该怎样,不这样会

Linux学习笔记--bash脚本编程之一变量、变量类型

bash脚本编程之一变量.变量类型 shell编程: 编译器,解释器 编程语言:机器语言.汇编语言.高级语言 静态语言:编译型语言 强类型(变量)语言 事先转换成可执行格式 C.C++.JAVA.C# 动态语言:解释型语言       on the fiy                                   弱类型 边解释边执行 ASP.ASP.net.PHP.shell.Python.perl 面向过程:shell.C   面向对象:JAVA.Python .Perl.C++

Linux基础之bash脚本编程进阶篇-选择执行语句(if,case)

bash脚本的书写规范简介 看本文需要了解的脚本撰写习惯:bash 开头顶格写#!紧接着写解释器路径/bin/bash 由于bash属于脚本语言,脚本语言的运行方式 解释运行:源代码 --> 运行时启动解释器,由解释器边解释边运行 Linux中的脚本解释器有:zsh,csh,bash,tsh众多shell,不过bash最常用. 第一行写完之后,就可以直接写代码.不过为了便于他人阅读通常会增加如下行: 第二行:#版本信息 第三行:#作者与联系方式 第四行:#版权宣告方式 第五行:#History

bash脚本编程之变量、变量类型、条件测试、算术运算、及特殊变量

一.学习目的 1.了解bash脚本的变量类型及变量的使用 2.了解bash中条件测试的种类及如何在bash中实现条件的判断 3.学会在bash中做算术运算 4.了解特殊变量的使用 二.学习内容 1). ①.bash的变量类型: 环境变量 .本地变量.局部变量.位置变量.特殊变量 环境变量: export VALUENAME = VALUE 作用领域是当前的shell进程及其子进程 本地变量: VALUENAME= VALUE 作用领域为整个bash的进程 局部变量:local VALUENAME

Linux学习笔记--bash脚本编程之二、条件判断

 bash脚本编程之二.条件判断 条件判断: 如果用户不存在 添加用户,给密码并显示添加成功: 否则 显示用户已存在,没有添加 bash中如何实现条件判断? 整数测试 字符测试 文件测试 条件测试的表达式:     [expression]     [[expression]]     test expression 整数比较: -eq:测试两个整数是否相等:比如 $A -eq $B     -ne:测试两个整数是否不等:不等,为真:相等,为假:     -qt:测试一个数是否大于另一个数:大于

Linux命令:bash脚本编程

bash脚本编程简介: 此文假定你没有任何关于脚本或一般程序的编程知识, 但是如果你具备相关的知识, 那么你将很容易就能够达到中高级的水平. . . 你可以把此文作为参考, 自学手册, 或者是关于shell脚本技术的文档. 介绍内容包括: A:变量.变量类型 B:条件判断 C:算术运算 D: E: F: G: A.bash变量类型: 1)本地变量:(局部变量) set VARNAME=VALUE: 作用域为整个bash进程: 2)局部变量: local VARNAME=VALUE:作用域为当前代

Linux基础之bash脚本进阶篇-函数

函数,什么是函数? 函数的出现最初是在数学中,它的数学定义如下:在某变化过程中有两个变量x,y,按照某个对应法则,对于给定的x,有唯一确定的值y与之对应,那么y就叫做x的函数. 而在计算机中函数的内涵发生了一些变化. 在编程中,为了简化代码量,通常会将经常调用的一些代码模块化,并一一个名字表示,当再次使用该模块时只需要输入该名字,系统会自动去读取该名字所对应的代码模块.因此在计算机中把一段独立功能的代码当做一个整体,并为之命一个名字,命名的代码段即为函数. 虽然此函数非彼函数但函数最本质的意义并

bash脚本编程之一 变量、变量类型等

shell编程: shell:弱类型编程语言 强:变量在使用前,必须事先声明,甚至还需要初始 弱:变量用时声明,甚至不区分类型 bash变量类型: 环境变量 本地变量 位置变量 特殊变量 本地变量: VARNAME=VALUE:作用域为整个bash进程: 局部变量: local VARNAME=VALUE:作用域为当前代码段: 环境变量:作用域为当前shell进程及其子进程 export VARNAME=VALUE 位置变量: $1,$2,.... 特殊变量: $?:上一个命令的执行状态返回值:

【Linux学习 009】脚本编程之变量和条件判断

一.Bash环境变量 bash中变量有四种种类型:环境变量.本地变量(局部变量).位置变量.特殊变量. 1.环境变量 环境变量作用范围最广,所有子bash进程都能够访问环境变量中的值,定义环境变量的方法是使用export关键字.举例: [email protected]:~$ export A=abc [email protected]:~$ echo $A abc [email protected]:~$ 2.本地变量 本地变量作用范围是当前bash,子bash访问不到父bash中定义的变量,