shell变量定义

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介:

shell变量定义

一,变量:

可变化的量,有名称的内存空间(在内存中要占据空间)

声明变量的目的是:让计算机留出内存空间来储存某一个确定类型的数据

二,bash中变量的类型

(1)环境变量:对当前shell及其子shell都是生效的,declare -x var=value or export var=value

显示当前环境变量,export or printenv or env

(2)本地变量(局部变量):仅对当前shell有效,对子shell无效。

(3)特殊变量:通常指shell自身的变量

(4) $?:引用上一条命令状态的返回值;

0:成功

1-255:失败1,2,127系统预留的

(5),位置变量:用于引用传递过来的参数: $0, $1 ,$2 ....${11}

(6),局部变量:作用范围可以缩小到只对一段代码有效)

local name (定义成只对一段代码有效)

命令别名:alias cmd_alias= ''(有些时候要带,没-,/之类就不用带'') , unlias

三,系统上常用的环境变量

(1)PATH:定义命令搜索路径

/usr/local/mysql/bin

export PATH=$PATH:/usr/local/mysql/bin(在原来PATH变量中添加/usr/local/mysql/bin,当运行mysql命令就不需要使用绝对路径)

hash 系统加速的缓存(shell内置变量)命令执行完会在hash中

(2) LANG:语言变量

/etc/sysconfig/i18n

语言:编码规则

DISPLAY=

screen

每个变量的生命的周期其关联进程,shell进程

(3) PS1

export 或declare -x 声明环境变量,

改变全局在/etc/profile,改变用户在~/.bashrc

立即生效与永久生效(写入配置文件才能永久生效)

(4) bash环境配置文件:

全局:

/etc/profile,/etc/profile.d/* ,/etc/bashrc

用户个人:

~/.bash_profile,~/.bashrc,~/.bash_logout

每一个shell脚本的执行,必然是使用对应的shell程序来实现

/bin/bash, /tmp/test.sh

登录式shell:(先读/etc/profile-->/etc/profile.d/*-->~/.bash_profile--->~/.bashrc-->/etc/bashrc)

1,用户登录最后创建的shell

2, su - username

非登录式的shell:(~/.bashrc-->/etc/bashrc--->/etc/profile.d/*)

su username

脚本执行

图形界面打开的shell

profile类:为登录式shell所用的配置文件(source=.)

设置环境变量;

设置命令或脚本

bashrc类,非登录式shell所用的配置文件

本地变量;

命令别名:

()表示在子shell中执行,()里的内容表示命令

管道的最后一个命令通常也在最后一个子shell执行


四,在bash中不需要事先声明,如果没声明则默认都当成字符串,但是可以事先声明,

变量的事先声明:

(1)declace [ options ] var

-i :整型

-x :环境变量

-a :数组

-r :只读变量,值不能改变,也不能撤消

(2)变量命名:

1,只能包含字母,数字,下划线,并且不能以数字开头;

2,不能与关键字冲突

3,见名知义

4,引号:

单引号:''

双引号:"" 变量替换

反引号:`` 命令替换(把命令执行结果当作别的命令的参数) =$()

5,变量引用:

$var

${var} :如果变量值中有特殊字符或带后缀时不能省略{}

path="$PATH"与path=${PATH}与path=$PATH(这种方式少用,因为有时$PATH中含有特殊字符时会出现问题,如含有空格之类的时候)

三种方式效果是一样的。都是定义path的变量等于PATH的变量

引用命令的结果两种方式:

(1)MYUID=$(id -u root)

(2)MYUDI=`id -u root`

五,变量赋值

set var_name=value (set 可以省略)

DIR=/tmp/name

DIR='/tmp/name'(一般情况都可以用,但是有空格之类的特殊符号时,刚必须加''或"")

DIR="/tmp/name"(如果/tmp/name中有$则不能使用'')

unset var_name(撤销变量) 变量名最好有大写,习惯性用法,当然不一定要

六:变量类型

1,决定存储类型 2,数据表示范围

整型:

字符型:

布尔型:

浮点型:

ascii:定义了基本字符,

byte:8bit

七,bash如何实现命令展开;

(1)切开;以space,tab,enter分隔

(2)别名替换,命令行展开,$ ,{} ,()

(3)再切开

(4)实现重定向:>,>> ,< ,<<

(5)执行命令

阻止展开:1,转义字符\,2,单引号,3 ,双引号

八,位置变量

./a.sh a b c

$0 $1 $2 $3

bash -x 与set -x(写在脚本里)调试脚本

set +x 取消调试,set -x 与set +x之间会调试(调试片段)

$#:代表接不接参数的个数,上面表示有四个

$@:代表”$1" "$2" "$3" "$4",每个变量是独立的(用双引号括起来)

$*:代表"$1 $2 $3 $4" 中间默认用空格键隔开,因IFS默认的第一个变量是空格

变量赋值等号与let (a=1 与let a=1效果一样,赋值数值,不用加引号)

name="mary smith"(引号的目的是告诉计算机从哪开始到哪结束,引号中间的字符就会被当作字符串处理

如果是只有单个时,可以不用引号name=mary,赋值字符串,最好加引号)

九,脚本的函数

功能模块,结构化编程,代码重用

先定义后调用

14,bash中定义被函数两种方式:

(1)function func_name {

body

}

(2)fname () {

body

}

函数的返回值:

是函数调用时所执行的函数体中的最后一条语句的状态返回值

自定义函数返回值

return #

函数还能接受参数

/var/lock/subsys

/etc/rc.d/init.d/functions 定义了系统上常用的函数

(1)daemon

(2)killproc

(3)pidofproc

(4)status

(5)echo

echo_failure

${para#*word} 以word为分隔符,自左向向,word这个分隔去匹配,找到第一次匹配到的所有内容先移出

${para##*word} 。。。。。。。。。。。。.................,找到最后一次,也就是最长的一个给移出

${para%word*}................ 自右向左

${para%%word*} 自右向左

取得目录路径的时候可以用上










本文转自 deng304749970 51CTO博客,原文链接:http://blog.51cto.com/damondeng/1312876,如需转载请自行联系原作者
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
9月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
841 2
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
256 1
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别
|
Java Shell Linux
Shell 变量设置
Shell设置变量
286 5
|
分布式计算 大数据 Shell
MaxCompute产品使用合集之odps shell如何将ech变量的结果集合写入文件,并且指定服务器的位置
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
319 10
|
Shell
[shell]在curl测试的data参数中引用变量
[shell]在curl测试的data参数中引用变量
887 1
|
Java Shell Linux
Shell 变量设置25-1
Shell编程语言是一种非类型的解释型语言,无需像C++/Java那样事先声明变量。通过赋值即可定义变量,在Linux支持的所有Shell中均适用。变量分为局部变量与环境变量,前者仅限于定义脚本内使用,后者可在其派生的子进程中使用。常见系统变量如$0表示当前程序名称,$n表示第n个参数(n=1,2,...,9),$*代表所有参数,$#代表参数个数,$?表示命令执行后的状态(0为成功),$UID为当前用户ID,$PWD表示当前目录。定义变量如`A=123`,
178 0
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别
|
存储 Shell 开发者
Shell 变量详解:如何定义、使用和管理
**Shell脚本中,变量是核心元素,用于暂存数据。变量默认为字符串,赋值时等号两侧无空格。命名遵循:数字、字母、下划线,以非数字开头。常用特殊变量如 `$0` (脚本名),`$#` (参数个数)。定义变量可使用单引号(不解析变量)、双引号(解析变量)或不加引号(注意空格)。使用花括号明确变量边界,`readonly` 则可设定只读变量,`unset` 删除变量。实践这些概念以加深理解。**
710 0
|
存储 Shell Linux
【Shell 编程】变量 | 特殊变量与标准变量 | 基本语句介绍
【Shell 编程】变量 | 特殊变量与标准变量 | 基本语句介绍
393 0