Linux中shell脚本中的变量

news2024/11/17 8:45:50

目录

一、变量的定义

二、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.sh

echo '$0' is $0
echo '$1' is $1
echo '$2' is $2
echo '$*' is $*
echo '$@' is $@
echo '$#' is $#

2、交互模式

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

vim test2.sh

read -p "Please input name:" -s NAME
echo ""
echo $NAME

六、脚本函数

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

WORD()
{
	action1
	action2
}

练习脚本

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 password
                echo ""
                useradd $1
        echo $password | passwd --stdin $1 &> /dev/null && echo $1 is created
        EXIT
        }
}
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: " USERNAME
  id $USERNAME &> /dev/null && {
        echo $USERNAME is exist !!
        }||{
        read -p "Please input password: " PASSWORD
        useradd  $USERNAME
        echo $PASSWORD | passwd --stdin $USERNAME &> /dev/null &&{
                echo $USERNAME is created !!
        }
        exit
        }
}


[ "$ACTION" = d ] &&{
  read -p "Please input username: " USERNAME
  id $USERNAME &> /dev/null && {
        userdel -r $USERNAME
        echo $USERNAME is delete !!
        }||{
        echo $USERNAME is not exist !!
        }
        exit
}

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

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

相关文章

【VPX611】基于6U VPX总线架构的SATA3.0高性能数据存储板(3.2GByte/s存储带宽)

VPX611是一款基于6U VPX总线架构的高性能数据存储板,该板卡采用2片Xilinx Kintex-7系列FPGA作为主控单元,FPGA内嵌RAID控制器,最大支持8个mSATA盘,最大存储容量可以达到8TByte,持续数据写入带宽可以达到3.2GByte/s。板…

【运维】fstab,systemctl与rc.local启动顺序

前言: 在redis,mongo服务添加systemctl enable启动的情况下,redis和Mongo没有正常启动。排查日志得知,使用到的路径没有挂载。下面截图中的/var/lib/redis和mongo都是软连接,指向了一个服务器的本地盘。 经过排查/var/log/messages以及查阅相关日志得出:…

微积分(三) 不定积分和定积分

前言 微分法也有它的逆运算——积分法。我们已经知道,微分法的基本问题是研究如何从已知函数求出它的导函数,那么与之相反的问题是:求一个未知函数,使其导函数恰好是某一已知函数。 不定积分 假设已知函数A,一个个关于面积的函…

【Linux】NFS服务器搭建配置挂载(Linux挂载Windows目录)

本篇作用于Linux挂载Windows目录,如需要Linux挂载Linux目录请移步我的另一篇文章 http://t.csdnimg.cn/lVrC6http://t.csdnimg.cn/lVrC6 一、Windows端操作步骤 1、创建windows目录,右键目录>属性 2、共享选项>共享按钮>选择Administrator&…

【Python爬虫三天从0到1】Day1:爬虫核心

目录 1.HTTP协议与WEB开发 (1)简介 (2)请求协议和响应协议 2. requests&反爬破解 (1)UA反爬 (2)referer反爬 (3)cookie反爬 3.请求参数 &#x…

基于springboot实现校园交友网站管理系统项目【项目源码+论文说明】

基于springboot实现校园交友网站管理系统演示 摘要 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生…

为什么说大模型微调是每个人都必备的核心技能?

▼最近直播超级多,预约保你有收获 近期直播:《基于开源 LLM 大模型的微调(Fine tuning)实战》 0 — 为什么要对 LLM 大模型进行微调(Fine tuning)? LLM 大模型(比如:Chat…

python自动化测试(三):xpath获取元素

目录 前置代码 一、什么是xpath方式 二、通过xpath 单组属性名属性值 的方式进行元素定位 三、通过xpath的多组属性进行元素的定位 四、通过xpath文本值的方式进行元素定位 五、通过模糊的文本值方式进行元素定位 前置代码 # codingutf-8 from selenium import webdrive…

export declare const TestService和export const TestService的区别

两者的主要区别在于导出方式的差异和访问方式的差异。 export declare const TestService:这种方式使用了export declare语法来导出一个常量TestService。export declare语法告诉编译器,此处的声明是供其他模块使用的,但是在当前模块中并没有…

Could not update Flowable database schema: unknown version from database:

文章目录 一、出现问题的情况二、解决方法1、 act_ge_property这个表里面的版本改成flowable-engine的版本号2、act_id_property表的schema.version版本也改成和flowable-engine版本一致(如图所示) 一、出现问题的情况 项目集成flowable流程框架的时候&…

第15届蓝桥杯Scratch选拔赛中级(STEMA)真题2023年8月

第15届蓝桥杯Scratch选拔赛中级(STEMA)真题2023年8月 一、单选题 第 1 题 单选题 点击以下积木块,生成的随机数是一个( )。 A.整数 B.小数 C.整数或小数 D.以上都不对 第 2 题 单选题 运行以下程序&#xff0…

全自动洗衣机什么牌子好?迷你洗衣机品牌推荐

这两年小型洗衣机可以称得上较火的小电器,小小的身躯却有大大的能力,一键可以同时启动洗、漂、脱三种全自动为一体化功能,在多功能和性能的提升上,还可以解放我们双手的同时将衣物给清洗干净,让越来越多小伙伴选择一款…

态势感知中的连续与离散

在态势感知中,连续和离散都是重要的概念。连续通常指的是可以在一定范围内连续变化的状态或变量,例如高度、照度、加速度等。这些连续的状态可以通过传感器等设备进行实时监测和采集,得到连续的数值。在态势感知中,可以利用这些连…

在全新ubuntu上用gpu训练paddleocr模型遇到的坑与解决办法

目录 一. 我的ubuntu版本![在这里插入图片描述](https://img-blog.csdnimg.cn/297945917309494ab03b50764e6fb775.png)二.首先拉取paddleocr源代码三.下载模型四.训练前的准备1.在源代码文件夹里创造一个自己放东西的文件2.准备数据2.1数据标注2.2数据划分 3.改写yml配置文件4.…

规范预算执行,构建企业预算管理一体化建设

随着我国财政改革的不断深入,在财政部总结了历次财政预算改革经验的基础上,我国以优化财政预算管理体系为目标,通过整合各类业务以实现企业预算管理一体化建设。其目的是更好的提升预算管理的质量,系统准确地反映企业预算情况&…

ffmpeg中examples编译报不兼容错误解决办法

ffmpeg中examples编译报不兼容错误解决办法 参考examples下的README可知,编译之前需要设置 PKG_CONFIG_PATH路径。 export PKG_CONFIG_PATH/home/user/work/ffmpeg/ffmpeg/_install_uclibc/lib/pkgconfig之后执行make出现如下错误: 基本都是由于库的版…

如何设置位移贴图模拟物体裂缝?

1、位移贴图的原理? 位移贴图(Displacement Map)是一种用于增强模型细节的贴图技术,它可以通过改变模型表面的几何形状来实现更加真实的效果。与其他贴图技术不同,位移贴图不仅仅是给模型表面添加纹理和颜色&#xff…

在Mac上安装MongoDB 5.0

MongoDB 5.0安装 1、环境描述 操作系统:macOS 14.0 (23A344) 2、安装MongoDB 2.1、tar解压包安装 下载地址:Download MongoDB Community Server | MongoDB 创建一个目录,以便数据库将文件放入其中。(默认情况下,数据…

Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器

Unity3D是一款强大的游戏开发引擎,可以用于创建各种类型的游戏。在游戏开发过程中,经常需要与服务器进行通信来实现一些功能,比如保存和加载游戏数据、实现多人游戏等。本文将介绍如何使用Unity引擎和C#语言搭建自己的服务器,并给…

Python 自动化详解(pyautogui)

文章目录 1 概述1.1 第三方库:pyautogui1.2 坐标说明 2 操作对象2.1 鼠标2.1.1 定位2.1.2 移动2.1.3 拖动2.1.4 滚动2.1.5 点击 2.2 键盘2.2.1 输入2.2.2 按键2.2.3 快捷键 2.3 屏幕2.3.1 截图2.3.2 分辨率 2.4 信息提示2.4.1 提示框2.4.2 选择框2.4.3 密码输入2.4.…