shell脚本中的变量是什么(书里总爱写到喜出望外的傍晚)

简介: shell脚本中的变量是什么(书里总爱写到喜出望外的傍晚)

目录



一、变量基础


1.1 命名要求


二、变量的类型


2.1 自定义变量


2.2 系统预设变量


2.2.1环境变量


2.2.2 只读变量


2.2.3 位置变量


2.2.4 预定义变量


三、各种引号


四、read标准输入取值


五、变量的作用范围


六、总结


一、变量基础



       保存将来会变化的数据,即使数据变化,直接调用变量即可,各种 Shell 环境中都使用到了“变量”的概念。Shell 变量用来存放系统和用户需要使用的特定参数(值),而且这些参数可以根据用户的设定或系统环境的变化而相应变化。通过使用变量,Shell 程序能够提供更加灵活的功能,适应性更强


1.1 命名要求


以固定的名称,存放可以能有变化的值

定义变量的格式:变量名=变量值

取消变量的格式:unnet 变量名

区分大小写

不能使程序中的保留字和内置变量:如:if, for,hostname

只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反

不要使用内置的变量,使用英文尽量使用词义通俗易懂,PATH


注意事项:


1.=号两边不能有空格


2.如果变量名已经存在则覆盖之前的变量值


查看变量

$变量名


${变量名} {}可以防止变量的歧义或者异常


二、变量的类型



常见 Shell 变量的类型包括:


自定义变量:由用户自己定义,修改和使用
系统预设变量:
    环境变量:由系统维护,用于设置工作环境,通常大写PATH,UID,HOSTNAME
    只读变量:只可以读取不可以更改
    位置变量:通过命令行给脚本传递参数
    预定义变量:Bash中内置的一类变量,可以调用,不能修改


2.1 自定义变量

image.png


可以把赋值的过程看成定义了一个指针,而$就是调用了这个指针


image.png


2.2 系统预设变量


2.2.1环境变量


存储在/etc/profile或者~/.bash_profile

命令env可以列出所有环境变量

常见环境变量:PATH、PWD、USER、UID、HOME、SHELL

image.png


[root@localhost data]# ls
#当我们在 命令框输入ls命令时,系统去path中找有没有ls,
#冒号将每个目录隔开,从这些目录中一次查找,找到就执行

image.png


2.2.2 只读变量


我们在定义shell变量时,默认定义的变量就是可以被修改的,我们还可以定义一个不能被修改的变量,即,使用 readonly 来定义变量


我们首先定义一个变量,接着,使用 readonly 来修饰该变量,表明该变量是只读的


无法使用 unset删除,最快方法重启


image.png


2.2.3 位置变量

存储脚本执行时的参数


使用$n表示,n为数字序列号


$1、$2、。。。${10}、${11} 两位数的数字需要用花括号


image.png

image.png

image.png


2.2.4 预定义变量


用来保存脚本程序的执行信息

直接使用这些变量

不能直接为这些变量赋值

变量名 含义
$0 当前所在进程或脚本名称
$#  已加载的位置变量的个数
$$ 当前运行进程的PID号
$? 命令执行后的返回状态,0表示正常,非0表示异常
$@ 所有位置参数的内容分成n份,每份作为一个独立的个体返回
$* 表示所有位置参数的值看成一个整体返回

image.pngimage.png

image.png


三、各种引号



双引号" ":允许扩展,以$引用其他变量


单引号' ':禁止扩展,即便$也视为普通字符


反引号` `:将命令的执行输出作为变量值,$()与反引号等效

image.png

image.png

image.png

image.png


四、read标准输入取值



read从键盘读入变量值完成赋值,类似Java中的 Scanner sc = new Scanner(System.in);


格式:read[ -p "提示信息" ] 变量名


参数:


-p 可以在屏幕显示提示信息

-t 可指定超时秒数

-s 设置是否在终端显示输入内容


image.png

image.png


#!/bin/bash
read -p "请输入用户名:" name
#谁来执行这个脚本,谁就给name赋值
read -s -p "请输入密码:" pass
#-s 参数可以使密码不明文显示,更加安全
#谁来执行这个脚本,谁就给pass赋值
useradd $name
echo "$pass" |passwd --stdin $name
#如果变量赋值不加空格,这里加不加引号没区别
#加引号可以防止一些意外出错

image.png


五、变量的作用范围



局部变量:新定义的变量默认只在当前shell环境有效,无法在子shell环境中使用


全局变量:在当前shell和子shell环境中均有效


export x=11  #全局有效

image.png


再次试验,使用export就会全局生效


六、总结



变量


赋值 变量名=变量值


只读变量 readonly


环境变量 在任何bash环境都被识别 export 变量名=变量值

目录
相关文章
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
85 1
|
25天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
48 2
6种方法打造出色的Shell脚本
|
11天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
33 1
|
16天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
37 2
|
30天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
49 6
|
26天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
存储 Java Shell
Shell 变量
10月更文挑战第2天
26 0
|
1月前
|
监控 Unix Shell
shell脚本编程学习
【10月更文挑战第1天】shell脚本编程
69 12
|
1月前
|
存储 运维 监控
自动化运维:使用Shell脚本简化日常任务
【9月更文挑战第35天】在IT运维的日常工作中,重复性的任务往往消耗大量的时间。本文将介绍如何通过编写简单的Shell脚本来自动化这些日常任务,从而提升效率。我们将一起探索Shell脚本的基础语法,并通过实际案例展示如何应用这些知识来创建有用的自动化工具。无论你是新手还是有一定经验的运维人员,这篇文章都会为你提供新的视角和技巧,让你的工作更加轻松。
60 2
|
2月前
|
Shell
shell脚本变量 $name ${name}啥区别
shell脚本变量 $name ${name}啥区别