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.hqwc.cn/news/151088.html

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

相关文章

sharepoint2016-2019升级到sharepoint订阅版

一、升级前准备: 要建立新的sharepoint订阅版环境,需求如下: 1.单服务器硬件需求CPU 4核,内存24G以上,硬盘300G(根据要迁移的数量来扩容大小等); 2.操作系统需要windows server 20…

Python----break关键字对while...else结构的影响

案例: 女朋友生气,要求道歉5遍:老婆大人,我错了。道歉到第三遍的时候,媳妇埋怨这一遍说的不真诚,是不是就是要退出循环了?这个退出有两种可能性: ① 更生气,不打算原谅…

P1868 饥饿的奶牛

根据题意可以知道是一个动态规划,看完数据范围之后可以知道是一个线性DP。 解决方法有点类似于背包问题,枚举背包的每一个空间。 如果把坐标轴上每个点都看成一个块儿,只需要按顺序求出前 i 个块儿的最大牧草堆数,f[i] 就是前i的…

Kafka - 异步/同步发送API

文章目录 异步发送普通异步发送异步发送流程Code 带回调函数的异步发送带回调函数的异步发送流程Code 同步发送API 异步发送 普通异步发送 需求&#xff1a;创建Kafka生产者&#xff0c;采用异步的方式发送到Kafka broker 异步发送流程 Code <!-- https://mvnrepository…

重复控制器的性能优化

前言 重复控制器在控制系统中是比较优秀的控制器&#xff0c;在整流逆变等周期性输入信号时&#xff0c;会有很好的跟随行&#xff0c;通常可以单独使用&#xff0c;也可以与其他补偿器串联并联使用。 这里我来分析一下重复控制器的重复控制器的应用工况以及其的优缺点。 分析…

UVa1354,ACM/ICPC Tokyo 2005,Mobile Computing(天平难题)

1、题目 2、题意 给出房间的宽度 r r r 和 s s s 个挂坠的重量 w i w_i wi​。设计一个尽量宽&#xff08;但宽度不能超过房间宽度 r r r&#xff09;的天平&#xff0c;挂着所有挂坠。 天平由一些长度为1的木棍组成。木棍的每一端要么挂一个挂坠&#xff0c;要么挂另外一…

【云原生】portainer管理多个独立docker服务器

目录 一、portainer简介 二、安装Portainer 1.1 内网环境下&#xff1a; 1.1.1 方式1&#xff1a;命令行运行 1.1.2 方式2&#xff1a;通过compose-file来启动 2.1 配置本地主机&#xff08;node-1&#xff09; 3.1 配置其他主机&#xff08;被node-1管理的节点服务器&…

MobPush厂商通道回执配置指南(Vivo,荣耀)

MobPush作为一款好用、可靠的智能推送开发者工具&#xff0c;为APP开发者提供了推送后用户行为的全链路数据分析&#xff0c;从而开发者可以更好地了解用户行为&#xff0c;优化推送策略&#xff0c;提高消息送达率&#xff0c;从而提升用户体验。 但这需要通过在后台配置厂商…

私有化部署企业IM即时通讯app,群聊多样化管控

随着企业内部沟通和协作的重要性不断增长&#xff0c;私有化部署企业即时通讯&#xff08;IM&#xff09;app成为了企业保护内部信息安全的一种重要手段。在这个领域&#xff0c;安全专属的移动数字化平台WorkPlus&#xff0c;支持私有化部署&#xff0c;涵盖即时通讯和办公应用…

Leo赠书活动-03期 【ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践 】

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; 赠书活动专栏 ✨特色专栏&#xff1a;…

C语言数据结构之数据结构入门

目录 数据结构介绍 数据结构发展史 何为算法 数据结构基础 基本概念和术语 四大逻辑结构&#xff08;Logic Structure&#xff09; 数据类型 理解复杂度概念 时间空间复杂度定义 度量时间复杂度的方法 程序运行时的内存与地址 编程预备 数据结构介绍 数据结构发展…

面试总结之消息中间件

RabbitMQ的消息如何实现路由 RabbitMQ是一个基于AMQP协议实现的分布式消息中间件&#xff0c;AMQP具体的工作机制是生产者将消息发送到RabbitMQ Broker上的Exchange交换机上&#xff0c;Exchange交换机将收到的消息根据路由规则发给绑定的队列&#xff08;Queue&#xff09;&am…