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月份,根据鲸参谋平台的数据显示,吸尘器的规模继续大幅下…

嵌入式 Tomcat 调校

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

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

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

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

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

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 是否启动…

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(…

douyin ios 8404六神参数学习记录

玩那么久安卓了&#xff0c;也终于换一换ios终端分析分析&#xff0c;还是熟悉的x-gorgon&#xff0c;x-argus&#xff0c;x-medusa那些参数。 随便抓个抖音 ios版本的接口&#xff1a; 像评论接口&#xff1a; https://api26-normal-hl.amemv.com/aweme/v2/comment/list/?…

锐捷ISG账号密码泄露漏洞

查看源代码&#xff0c;搜索password获取管理员账号密码&#xff1a; 之后&#xff0c;可以通过在线网站对该 MD5 值进行解密&#xff0c;并且我们发现这还是弱口令&#xff1a; 下面可以使用上一步查找到的账号和解密后的密码登录成功 文笔生疏&#xff0c;措辞浅薄&#x…

vue重修之Vuex【上部】

文章目录 版权声明Vuex 概述Vuex 的主要概念和组件 vuex的使用状态 &#xff08;state&#xff09;Vuex特点 访问vuex中数据$store访问mapState辅助函数访问 开启严格模式及Vuex的单项数据流突变&#xff08;mutations&#xff09;mutations初识带参 mutations辅助函数 mapMuta…

用超声波清洗机洗眼镜的有哪些?清洁力强的超声波清洗机不能错过

超声波清洗机在清洗眼镜方面表现出色&#xff0c;其强大的清洁能力可以彻底清除眼镜上的污垢和细菌。这种清洗方式被认为是一种高效且卫生的清洁方式&#xff0c;因为它利用高频振动和微射流打击力来清除污垢和细菌&#xff0c;而不是使用化学物质。对于那些长时间佩戴眼镜或者…

五、Qt中的常用类

1. QString 字符串类 QString是Qt中的字符串类&#xff0c;与C/C不同的是&#xff0c;不再使用ASCII编码&#xff0c;而使用Unicode编码。因此一个字符不是8位的char&#xff0c;而是16位的QChar&#xff0c;这就是为什么之前一个汉字占用一个字符的原因。、 QString几乎向前兼…

【Javascript】定时器

目录 延迟执行 定时执行 清除定时任务 延迟执行 setTimeout(function(){}, 毫秒) console.log(1); console.log(2); console.log(3); setTimeout(function (){console.log(5) },5000) console.log(4);setTimeout(function (){ console.log(5) },5000) 设定了一个任务&…

Proteus仿真--从左往右流水灯仿真(仿真文件+程序)

本文主要介绍基于51单片机的流水灯仿真&#xff08;完整仿真源文件及代码见文末链接&#xff09; 仿真运行视频 Proteus仿真--基于51单片机的流水灯仿真&#xff08;从左往右&#xff09; 附完整Proteus仿真资料代码资料 百度网盘链接: https://pan.baidu.com/s/1aZH13zwQkNB7…

Go基础——数组、切片、集合

目录 1、数组2、切片3、集合4、范围&#xff08;range&#xff09; 1、数组 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列&#xff0c;这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。 Go 语言数组声明需要指定元素类型及元素个数&#xff0c;与…