谢烟客---------Linux之Bash基础特性变量(3)

变量

程序 = 指令(只读) + 数据(数据存储的位置变量、列表、数组)

指令可通过位置变量调用,向脚本传递的数据

变量名 可引用的"命名的内存空间":取了名字的内存空间,用名字即可调用事先划分的内存空间

变量类型 变量内部存储的数据的类型

变量类型的作用

限定了存储空间

限定了存储格式

限定了参与的运算

变量的类型

字符型

数值型

整型

浮点型

变量的类型

强类型 定义变量时,必须指定变量的类型,参与的运算必须符合要求

调用未申明的变量,会报错

弱类型 定义变量时,不用指定变量的类型,参与运算时将自动进行隐式转换

直接赋值,直接引用 ,默认为字符型

var=value 表示把value值存储在var内存空间中

bash弱类型,解释型

1、不用申明,直接引用

2、参与运算,自动转换

变量的类型(按bash作用域划分)

本地变量   生效范围是当前shell的生命周期,对当前shell之外的其他shell进程和当前shell的子或父进程均无效。

环境变量   生效范围当前shell进程及其子shell进程,对其他shell无效。运行脚本时,脚本在当前shell的子shell中运行

局部变量  生效范围为当前shell进程中,只对某个代码片段(通常指)生效

位置变量  作用:向脚本参数,在让脚本脚本中可调用向脚本的参数

特殊变量   一般指的是内置变量,$?返回状态,$0返回状态, 指令可以通过位置变量调用,向脚本传递的参数

本地变量

      生效范围是当前shell的生命周期,对当前shell之外的其他shell进程和当前shell的子或父进程均无效。

1)在当前shell定义的变量,对当前shell生效(当前shell进程的生命周期内)

[[email protected] ~]# tty                       #当前终端
/dev/pts/2
[[email protected] ~]# a=3                       #在模拟终端2上定义一个本地变量
[[email protected] ~]# echo $a                   #可以显示其变量值
3

2)在当前shell中定义的变量,在新的shell中,不能生效

[[email protected] ~]# tty                       #另起一个shell,此时在模拟终端0上
/dev/pts/0
[[email protected] ~]# echo $a                   #显示其变量的值

3)当前shell的子shell进程中,变量也不会生效

[[email protected] ~]# pstree                    #显示当前系统上的进程树,
systemd  --                                         #systemd为当前shell的父进程
         
         ├─sshd─┬─sshd───bash───pstree   # 当前shell的位置
        
[[email protected] ~]# bash                      #新启动一个子shell
[[email protected] ~]# pstree
systemd  --
         ├─sshd─┬─sshd───bash───bash───pstree #当前shell为子shell

[[email protected] ~]# echo $a                   #变量不会生效
 
[[email protected] ~]#     
[[email protected] ~]# exit                      #退出当前shell,回到父shell
exit
[[email protected] ~]# pstree
systemd─
       ├─sshd─┬─sshd───bash───pstree     #回到当前shell进程

[[email protected] ~]# echo $a                   #变量生效  
3

环境变量

生效范围当前shell进程及其子shell进程,对其他shell无效

注释

1)在当前shell定义的变量,对当前shell及子shell有效

[[email protected] ~]# tty                       #当前终端
/dev/pts/2
[[email protected] ~]# declare -x name=pidof     #定义环境变量
[[email protected] ~]# echo $name             
pidof
[[email protected] ~]# bash
[[email protected] ~]# echo $name
pidof
[[email protected] ~]# exit
exit

2)在当前shell中定义的变量,在新的shell中,不能生效

[[email protected] ~]# tty                       #另起一个shell,此时在模拟终端0上
/dev/pts/0
[[email protected] ~]# echo $name

[[email protected] ~]#

位置变量

$1,$2,.... 调用每个向脚本传递的参数

[[email protected] ~]# nano psvar.sh
#!/bin/bash
echo "\$1: $1"
echo "\$2: $2"

[[email protected] ~]# chmod +x psvar.sh 
[[email protected] ~]# ls -l psvar.sh
-rwxr-xr-x 1 root root 43 Aug  1 15:10 psvar.sh

[[email protected] ~]# ./psvar.sh tom jerry
$1: tom
$2: jerry

特殊变量

    $0:表示命令本身,$?命令的执行状态结果 

# echo ‘echo "\$0: $0"‘ >> psvar.sh
[[email protected] ~]# ./psvar.sh tom jerry
$1: tom
$2: jerry
$0: ./psvar.sh

本地变量

赋值:把value表示的值 存储在name变量的内存空间中

# name=‘value‘

name    内存空间的名字

=          赋值符号

value    值

‘ ’或 " " 引用符号

引用实现赋值:

纯文本引用:将文本字符赋值给变量

变量的引用:将变量的值赋值给另一个变量

命令的引用:将命令的执行结果赋值给变量:

混合使用

注意:赋值时,如果值有空格必须加引号

变量引用实现赋值

[[email protected] ~]# username=pig
[[email protected] ~]# echo $name

[[email protected] ~]# name=$username
[[email protected] ~]# echo $name
pig

命令引用实现赋值

[[email protected] ~]# pwd
/root
[[email protected] ~]# name=`pwd`
[[email protected] ~]# echo $name
/root

混合使用

# filename=`date +%F-%H-%M-%S`
# echo $filename
2017-08-01-15-41-45

值有空格,在赋值时需要加引号

[[email protected] ~]# name=tom obama
-bash: obama: command not found
[[email protected] ~]# name="tom obama"
[[email protected] ~]# echo $name
tom obama

    变量引用 ,$name, ${name},通常用$name。当变量名与能作为变量名使用的字符串连在一起使用时,以免把整个名字当作变量,必须加 {}

‘ ‘  强引用 其中的变量引用,不会被替换为变量中所存储的值

" " 弱引用 其中的变量引用,会被替换为变量中 所存储的值

1、何时应该使用${name}

# animal=pig
# echo "there are some $animals" #把整个名字当作变量。由于此变量未定义,故为空
there are some 
# echo "there are some ${animal}s"
there are some pigs

2、强引用和弱引用的区别

[[email protected] ~]# echo "$animal" 变量会被替换
pig 
[[email protected] ~]# echo ‘$animal‘ 变量不会被替换
$animal

显示所有本地变量和环境变量: set

变量销毁:在shell终止时,变量会被销毁。在shell终止前销毁变量: unset name

[[email protected] ~]# name=pika
[[email protected] ~]# echo $name
pika
[[email protected] ~]# unset name
[[email protected] ~]# echo $name

[[email protected] ~]#

环境变量

 赋值 把value表示的值 存储在name变量的内存空间中   

方法一
# declare -x name=‘value‘
方法二
# export name=‘value‘
方法三
# name=value
# declare -x name
# export name

引用

# $name,${name}

显示所有的环境变量

# export
# env
# printenv

其中大写的是环境变量: 定义bash工作环境

bash有许多内建的环境变量:对于大写的变量,不要直接赋值,定义环境变量时,避免bash内建的环境变量,否则会改变bash的工作行为。

PATH,SHELL,UID,PS1,HISTSIZE,HOME,PWD,OLDPWD

[[email protected] ~]# echo $PATH      #bash解析命令所依赖的变量
/usr/local/nginx/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[[email protected] ~]# echo $SHELL     #当前shell环境
/bin/bash
[[email protected] ~]# echo $UID       #当前有效用户的ID号码
0
[[email protected] ~]# echo $PS1       #定义命令提示符字串
[\[email protected]\H \W]\$
[[email protected] ~]# echo $HISTSIZE  #显示命令条数
1000
[[email protected] ~]# echo $HOME      #显示当前用户的家目录位置
/root
[[email protected] ~]# echo $PWD       #显示当前所处的目录
/root 
[[email protected] ~]# echo $OLDPWD    #显示最近一次切换的目录

[[email protected] ~]#

变量销毁:unset

unset

变量命名的法则

1、不能使用关键字和保留字,if,for

2、只能使用数字、字母及下划线,不能以数字开头

3、尽量做到,见名知义

totalweight --> totalWeight 避免全部大写
--> total_weight 或者用连字符

4、尽量避免 _ 开头

5、尽量避免 全大写

文件名命名的法则

1、区分大小写

file1, File1, FILE1是不同的文件

2、不使用特殊字符

/:根目录,路径分隔符

3、长度小于255个字符

4、以.开头的文件,均为隐藏文件

LInux哲学思想

1、一切皆文件

2、组合小程序

3、不交互

4、文本编辑配置

常量、只读变量:定义变量后,变量不允许改变。只能等到shell进程终止时,才随之消亡

赋值

方法一
readonly name
方法二
declare -r name

  注释

[[email protected] ~]# name=obama
[[email protected] ~]# echo $name
obama
[[email protected] ~]# readonly name
[[email protected] ~]# name=jerry
-bash: name: readonly variable
[[email protected] ~]# unset name
-bash: unset: name: cannot unset: readonly variable

局部变量

用于函数体中

位置变量

指令可以通过位置变量调用,向脚本传递的参数

变量

$1,$2,...对应调用 第1 第2 第3...参数
$0 命令本身

调用传递给脚本的所以的参数

$* 表示调用时,将传递的参数当作一个字串

[email protected] 每个参数当作独立的字串

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

[[email protected] ~]# cat posvar.sh 
#!/bin/bash
echo "\$1: $1"
echo "\$2: $2"
echo "\$3: $3"
echo "\$*: $*"
echo "\[email protected]: [email protected]"
echo "\$#: $#"
echo "\$0: $0"
[[email protected] ~]# ./posvar.sh tom jerry blair
$1: tom
$2: jerry
$3: blair
$*: tom jerry blair
[email protected]: tom jerry blair
$#: 3
$0: ./posvar.sh

换港操作符 shift [n] 默认踢一个

[[email protected] ~]# cat posvar.sh 
#!/bin/bash
echo "\$1: $1"
shift
echo "\$1: $1"
shift 2
echo "\$1: $1"
echo "\$*: $*"
echo "\[email protected]: [email protected]"
echo "\$#: $#"
echo "\$0: $0"
[[email protected] ~]# ./posvar.sh tom jerry blair mariadb
$1: tom
$1: jerry
$1: mariadb
$*: mariadb
[email protected]: mariadb
$#: 1
$0: ./posvar.sh

向脚本传递参数,做文本行的统计

# vim posvar.sh
#!/bin/bash
countlines=`cat $1 | wc -l`
echo "$1 has $countlines lines"
# ./posvar.sh /etc/fstab
/etc/fstab has 10 lines
时间: 2024-10-11 05:01:33

谢烟客---------Linux之Bash基础特性变量(3)的相关文章

谢烟客---------Linux之Bash基础特性条件测试&&自定义退出状态码(6)

条件测试 判断某需求是否满足,需要由测试机制来实现. 根据命令的执行状态结果,表达不同的测试条件 1.根据id命令的执行状态结果,判断用户是否存在 [[email protected] ~]# id root uid=0(root) gid=0(root) groups=0(root) [[email protected] ~]# echo $? 0 [[email protected] ~]# id help id: help: no such user [[email protected] 

谢烟客---------Linux之Bash基础特性算术运算(5)

算术运算 算术:数学中最古老,最基础和最初等的部分.它研究数的性质及其运算.把数和数的性质,数和数之间的四则运算在应用过程中的经验积累起来,并加以整理,就形成了最古老的一门数学--算术 算术运算:数的加.减.乘.除以及乘方开方等数学运算,区别于几何运算. 算术运算的符号 完成基本的算术运算 (arithmetic operators) 符号,就是用来处理四则运算的符号 1)加法:同类事物的重复或累计,是数字运算的开始,不同类比如一个苹果+一个橘子其结果只能等于二个水果就存在分类与归类的关系 公式

谢烟客---------Linux之Bash基础特性

框架:     bash的引用:命令引用.变量引用     bash命令历史     bash中的通配符     bash中的管道     I/O重定向     命令补全     路径补全     bash的快捷键     命令的别名     命令行的展开      1)命令的执行结果与命令的执行状态结果      命令的执行结果: 用户输入命令+Enter后,命令如何执行     命令提示符,回车键后:bash切片,分析命令,[选项],参数,提请给内核,分配资源,运行为一个进程  1)用户接口

谢烟客---------Linux之Bash基础特性(2)

Linux之哲学思想 一切皆文件 避免交互,实现Bash编程 文本编程命令实现配置 组合小程序完成复杂任务 总结 过程式编程 解释执行 字符和数值存储的区别 shebang -> cpu ->解释器 数据类型 变量类型,即为内部数据的类型 bash 过程式编程.解释执行 变量的类型为:弱类型 11)Bash编程 编程风格:过程式编程.对象式编程 过程式编程:目的解决问题 只考虑数据怎么组织 指令组织数据 为了完成复杂的任务 顺序执行:逐个运行任务 选择执行:有一个标准,只执行某些代码片段 循环

谢烟客---------Linux之Bash基础特性配置文件(4)

前言 在bash进程中,读取到bash进程内存中的数据,在bash进程终止时,进程中的数据会被操作系统回收,变量也是定义在当前shell进程内存空间的数据.在shell终止时,变量也会失效 作用 选项:定义命令的工作行为 配置文件也能定义工作行为,主要存储命令的诸多选项,定义长期有效的行为 功能 让用户能更好的使用bash 配置文件的分类 对所有用户生效的配置: /etc/profile,/etc/profile.d/ /etc/bashrc 对当前用户有效 ~/.bashrc ~/.bash_

0823第三课-2 Linux的文件系统 bash基础特性

1.linux文件系统 绝对路径:/ LSB: FHS(文件系统层级结构标准) FHS: /boot: 引导文件存放目录,例如kernel(vmlinuz).bootloader(grub, grub2): 包含开机菜单以及开机所需要的配置文件等等 [[email protected] boot]# lsconfig-2.6.32-504.el6.x86_64         lost+foundefi                                  symvers-2.6.3

2017-11-5Linux基础知识(10)bash基础特性

在上一章中我们讲述了bash基础特性之命令补全和路径补全以及它的命令引用,以及讲了文件管理命令,例如:复制.移动和删除,然后我们也讲述了变量,主要围绕着存储格式.数据范围和参与运算.那么这次我们继续讲述bash的基础特性,这一次我们讲述的是文件的通配符和IO重定向等. 一.globbing:文件名通配 我们在查询某些文件的时候,通常是在该目录下进行查找,有的时候文件繁多,想找一些特定的文件就得从该目录下逐个匹配进行查找进行通配,如果没找到则显示为空,找到的话就在下面显示该匹配结果的文件或目录,那

Linux之bash的特性

bash的特性(1)常用组合快捷键:,ctrl+d Ctrl+a: 跳转至命令行首 Ctrl+e: 跳转至命令行尾 Ctrl+u: 删除命令行首至当前光标所在处之前的所有内容 Ctrl+k: 删除当前光标所在处至命令行尾的所有内容 Ctrl+l: 清屏 Ctrl+c: 中止或取消 Ctrl+z: 把当命令送至后台 Ctrl+d:回到登陆用户登陆界面 (2)命令补全:命令的补齐,参数中目录或文件的补齐 当输入命令的部分是唯一的时候按TAB键就可以不全剩下的部分 当输入命令的部分不是唯一的,按两次T

linux文件系统及bash基础特性

linux文件系统 一.根文件系统 linux被识别的第一个被称为根之间关联的文件系统叫做根文件系统(rootfs),其他分区要想被读到,需要挂载到根目录的某个挂载点(根的子目录)上.根文件系统至关重要,整个文件系统统一访问入口. Linux引导启动时,默认使用的文件系统是根文件系统.其中一般都包括这样一些子目录: /boot 系统引导文件存放目录 /bin 供所有用户使用的命令(不能关联到独立分支)不能关联到独立分区,os启动即会用到的程序. /sbin 管理员使用特权命令.root-only