Linux中shell脚本中的变量

目录

一、变量的定义

二、shell脚本中变量的定义方法

1、变量名称

2、环境级别 

3、用户级别

4、系统级别

5、删除设定的变量

三、变量的转译

1、转译

2、声明

3、变量的数组

四、Linux中命令的别名设定 

五、用户环境变量的更改

脚本中的传参

1、非交互模式

2、交互模式

六、脚本函数

练习脚本


一、变量的定义

  • 变量就是内存一片区域的地址(用一个字符串表示内存地址的方式)
  • 变量存在的意义:命令无法操作一直变化的目标,用一串固定的字符来表示不固定的目标可以解决此问题

二、shell脚本中变量的定义方法

1、变量名称

  • 变量名称可包含的字符:字母,下划线_,数字
  • 变量名称定义规则:不能用数字开头
  • 建议:变量名称短全用大写字符,变量名称长用_区分子类

sh无法运行脚本,用.可以运行脚本
因为sh的运行方式会在当前shell中重新开启一个子shell,因此变量的值没有传递到子shell中,所以无法得到运行结果,须将变量放到公共区域中去。

2、环境级别 

export a=1 在环境关闭后变量失效

        当环境关闭后,shell在内存中的所有数据被系统回收,打开新的shell,是一个新的内存地址,无法寻址得到a的值 

3、用户级别

环境关闭后,仍有效,切换用户后失效

vim ~/.bash_profile
export a=1

4、系统级别

不受环境和用户的影响

vim /etc/profile
export a=2
vim /etc/profile.d/westos.sh
export b=3

5、删除设定的变量

依次删除设定的系统变量,用户变量,环境变量

rm -fr /etc/profile.d/skk.sh
vim ~/.bash_profile
unset a

三、变量的转译

1、转译

\转译单个字符
“”弱引用,批量转译字符,不能转译"\" " " "$" "!"
''强引用
$$当前进程的id

 

2、声明

对a做变量声明

a=1
echo $ab
echo ${a}b

 

 3、变量的数组

a=(1 2 3 4 5 6)
a$[a[@]:起始元素id:元素个数]echo ${a[0]}         ##数组中第一个元素
echo ${a[3]}	     ##数组中第4个元素
echo ${a[-1]}        ##数组中最后一个元素
echo ${a[*]}         ##数组中所有元素
echo ${a[@]}         ##数组中所有元素
echo ${a[@]:0:3}     ##数组中第1到3个元素
echo ${a[@]:3:3}	 ##第三个元素后的三个元素
echo ${#a[@]}        ##数组中元素的个数unset a[n]           ##删除数组中的第n+1个元素
unset a              ##删除a这个数组

四、Linux中命令的别名设定 

alias xie='vim'  ##临时设定
vim ~/.bashrc
alias xie='vim'  ##只针对当前用户生效
vim /etc/bashrc
alias xie='vim'  ##针对系统所有用户生效
vim /etc/skel/.bashrc
alias xie='vim'  ##针对新建的用户生效
alias  ##查看
unalias xie  ##删除当前环境中的alias

五、用户环境变量的更改

设定的方式:

export PATH=$PATH:/mnt  ##环境级别
vim ~/.bash_profile  ##用户级别
vim /etc/bash_profile  ##系统级别

/mnt下的脚本有执行权限后,可以不用加绝对路径执行

脚本中的传参

1、非交互模式
$0shell脚本的文件名
$1脚本后所输入的第一串字符
$2脚本后所输入的第二串字符
$*脚本后所输入的所有字符"1 2 3"
$@脚本后所输入的所有字符"1" "2" "3"
$#脚本后所输入的字符串个数
vim test.shecho '$0' is $0
echo '$1' is $1
echo '$2' is $2
echo '$*' is $*
echo '$@' is $@
echo '$#' is $#

2、交互模式

read:赋值,-p:输出提示语
-s:隐藏输入内容,echo "":换行

vim test2.shread -p "Please input name:" -s NAME
echo ""
echo $NAME

六、脚本函数

定义:程序的别名
设定方式:WORD在脚本中就代表action1 、action2这两个动作

WORD()
{action1action2
}

练习脚本

1

sh create_user.sh Please input username: westos

westos exist> westos is exist>Please input username:

westos not existplease input password: 无回显密码

此用户会自动建立并且密码为提示后设定的密码

并显示:westos is created 并再次提示Please input username:

当Please input username:exit 此脚本退出

EXIT()
{read -p "Please input username: "  username[ "$username" = "exit" ]||[ "$username" = "EXIT" ] &&{echo "bye"exit}||{USER_ACTION $username}
}USER_ACTION()
{id $1 &> /dev/null && {echo "$1 is exist"EXIT}|| {read -p "Please input password: " -s passwordecho ""useradd $1echo $password | passwd --stdin $1 &> /dev/null && echo $1 is createdEXIT}
}
EXIT

 

2

echo "[a]add [d]delete"
read -p "Please input action: " ACTION[ "$ACTION" != "a" -a  "$ACTION" != "d" ] && {echo Wrong action !!exit}[ "$ACTION" = a ] &&{read -p "Please input username: " USERNAMEid $USERNAME &> /dev/null && {echo $USERNAME is exist !!}||{read -p "Please input password: " PASSWORDuseradd  $USERNAMEecho $PASSWORD | passwd --stdin $USERNAME &> /dev/null &&{echo $USERNAME is created !!}exit}
}[ "$ACTION" = d ] &&{read -p "Please input username: " USERNAMEid $USERNAME &> /dev/null && {userdel -r $USERNAMEecho $USERNAME is delete !!}||{echo $USERNAME is not exist !!}exit
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android studio启动Task配置

Android studio 高版本默认不开启Task配置,需要自己手动开启 1.低版本配置路径:(复制他人图片) 2.高版本路径:添加下图勾选配置即可 3.gradle task 3.1 初识task gradle中所有的构建工作都是由task完成的,它帮我们处…

Anaconda下载和安装

1.概述 1)包含conda:conda是一个环境管理器,其功能依靠conda包来实现,该环境管理器与pip类似。 2)安装大量工具包:Anaconda会自动安装一个基本的python,该python的版本Anaconda的版本有关。该…

2023年清洁电器行业数据分析:洗地机市场规模持续倍增,进入赛点

洗地机作为清洁电器领域的明星品类,正在成为继扫地机器人之后拉动清洁电器市场大盘的又一核心动力。 在清洁电器领域,扫地机器人、洗地机和吸尘器是三大热门品类。截至今年9月份,根据鲸参谋平台的数据显示,吸尘器的规模继续大幅下…

数据库、数据仓库相关

1. 数据库与数据仓库的区别 数据库 Database (Oracle, Mysql, PostgreSQL)主要用于事务处理。数据仓库 Datawarehouse (Amazon Redshift, Hive)主要用于数据分析。 数据库和数据仓库是两种不同的数据存储方式,它们的设计目的和使用场景也有所不同。数据库通常用于…

嵌入式 Tomcat 调校

SpringBoot 嵌入了 Web 容器如 Tomcat/Jetty/Undertow,——这是怎么做到的?我们以 Tomcat 为例子,尝试调用嵌入式 Tomcat。 调用嵌入式 Tomcat,如果按照默认去启动,一个 main 函数就可以了。 简单的例子 下面是启动…

系列十八、请描述下bean的生命周期

一、概述 bean的生命周期是指bean从创建到销毁的整个过程。 二、生命周期 bean的生命周期是指bean从创建到销毁的整个过程,大致可以分为如下四个过程: 2.1、实例化 实例化可以通过如下几种方式完成:(参考系列十五&#xff09…

JPA联合主键

​ 在实际工作中,我们会经常遇到联合主键的情况,所以我用简单例子列举JPA两种实现联合主键的方式。 1、如何通过IdClass 实现联合主键 第一步:新建一个UserInfoID类,里面是联合主键 Data Builder NoArgsConstructor AllArgsConstructor pu…

【Luogu】 P5642 人造情感(emotion)

题目链接 点击打开链接 题目解法 考虑如何计算 f ( U ) f(U) f(U),我不知道如何能想到下面的解法 一个技巧是把路径挂在 l c a lca lca 上 我们令 f u f_{u} fu​ 表示完全包含在 u u u 的子树中的路径的最大独立集 考虑转移,记 s u m u ∑ v…

maven之父子工程版本控制案例实战,及拓展groupId和artifactId的含义

<parent>标签 用于父子工程项目&#xff0c;什么是父子工程&#xff1f; 顾名思义&#xff0c;maven父子项目是一个有一个父项目&#xff0c;父项目下面又有很多子项目的maven工程&#xff0c;当然&#xff0c;子项目下面还可以添加子项目&#xff0c;从而形成一个树形…

Java架构师信息系统构建

目录 1 导学2 信息系统概述2.1 企业主要使用的信息化系统介绍3 业务处理系统3.1 业务处理系统TPS3.2 管理信息系统MIS3.3 决策支持系统DSS4 专家系统ES5 办公自动化系统OAS6 企业资源规划ERP7 典型信息系统架构模型8 信息化战略体系9 客户关系管理CRM10 供应链管理SCM11 企业应…

python DevOps

在云原生中&#xff0c;python扮演的角色是什么&#xff1f; 在云原生环境中&#xff0c;Python 作为一种高级编程语言&#xff0c;在多个方面扮演着重要角色。云原生是指利用云计算的各种优势&#xff08;如弹性、可扩展性和自动化&#xff09;&#xff0c;构建和运行应用程序…

vscode 通过ssh 连接虚拟机vmware(ubuntu)

1.网络连接是否ping的通&#xff08;ubuntu虚拟机使用的是net 连接方式&#xff09; 2.配置环境 ubuntu 需要安装ssh server 服务 &#xff08;1&#xff09;&#xff1a; 安装&#xff08;Ubuntu安装ssh server) apt-get install openssh-server 检查是否ssh server 是否启动…

Hive 常用DML操作

本专栏案例数据集链接: https://download.csdn.net/download/shangjg03/88478038 1.加载文件数据到表 1.1 语法 LOAD DATA [LOCAL] INPATH filepath [OVERWRITE] INTO TABLE</

数据安全的重要性:如何解密[thekeyishere@cock.li].Elbie勒索病毒

尊敬的读者&#xff1a; 随着数字时代的来临&#xff0c;网络威胁也不断进化&#xff0c;而[datastorecyberfear.com].Elbie勒索病毒是其中的一个引人注目的例子。这个恶意软件采用高度精密的方法&#xff0c;将用户的数据文件锁定&#xff0c;并要求支付赎金以获取解锁密钥。…

leetCode 229. 多数元素 II + 摩尔投票法 + 进阶 + 优化空间

229. 多数元素 II - 力扣&#xff08;LeetCode&#xff09; 给定一个大小为 n 的整数数组&#xff0c;找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。 进阶&#xff1a;尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。 &#xff08;1&#xff09;哈希表 class …

06条件判断

if语句的基本语法 if关键字后面跟一个判断条件 如果条件成立那么就运行判断条件里面的代码 else处理条件不满足时候的代码块 m 9 if m > 10:print("买一瓶醋") else:print("钱不够&#xff0c;请带够钱再来吧&#xff01;")#条件判断流程图 进入网…

[C++]——带你学习类和对象

类和对象——上 目录&#xff1a;一、面向过程和面向对象二、类的概念三、类的访问限定符和封装3.1 访问限定符3.2 封装 四、类的作用域五、类的实例化六、类的对象大小的计算七、类成员函数this指针7.1 this指针的引用7.2 this 指针的特性 目录&#xff1a; 类和对象是很重要…

GoLong的学习之路(十二)语法之标准库 flag的使用

上回书说到&#xff0c;fmt的标准库的一些常用的使用函数。这次说flag的使用&#xff0c;以下这些库要去做了解。不然GG&#xff0c;Go语言内置的flag包实现了命令行参数的解析&#xff0c;flag包使得开发命令行工具更为简单。 文章目录 os.Argsflag包flag.Type()flag.TypeVar(…

JPA联合主键使用

在实际工作中&#xff0c;我们会经常遇到联合主键的情况&#xff0c;所以我用简单例子列举JPA两种实现联合主键的方式。 1、如何通过IdClass 实现联合主键 第一步:新建一个UserInfoID类&#xff0c;里面是联合主键 Data Builder NoArgsConstructor AllArgsConstructor publi…

前端小技巧: 实现 LRU 缓存算法功能

关于LRU缓存 LRU - Lease Recently Used 最近使用 如果内存优先&#xff0c;只缓存最近使用的&#xff0c;删除 ‘沉睡’ 数据 核心 api: get set 分析 使用哈希表来实现, O(1)必须是有序的&#xff0c;常用放在前面&#xff0c;沉睡放在后面, 即&#xff1a;有序&#xff0…