Linux脚本语言学习--下

4.Bash的变量

4.1.用户自定义变量

4.1.1.什么是变量

变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息的时候,如一个文件名或是一个数字,就把他存放在一个变量中。每个变量有一个名字,所以很容易引用他。使用变量可以保存有用信息,使系统获知用户相关设置,变量也可以用于保存暂时信息。

4.1.2.变量设置规则

  • 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如果变量名是“2name”则是错误的。
  • 在Bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型。
  • 变量是用等号连接值,等号两侧不能有空格。
  • 变量的值如果有空格,需要使用单引号或者双引号包括。
  • 在变量的值中,可以使用“\”转义符。
  • 如果需要增加变量的值,那么可以进行变量值叠加。不过变量需要用双引号包含:“$变量名”,${name}。
  • 如果是把命令的结果作为变量的值赋予变量,则需要使用反引号或者$()包含命令。
  • 环境变量名建议大写,便于区分。

4.1.3.变量分类

  • 用户自定义变量
  • 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
  • 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
  • 预定义变量:是bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的。

4.1.4.本地变量

name="db db"
aa=123
aa="$aa"456
aa=${aa}789
root@mfedang-virtual-machine:~# name="db db"
root@mfedang-virtual-machine:~# aa=123
root@mfedang-virtual-machine:~# aa="$aa"456
root@mfedang-virtual-machine:~# aa=${aa}789
root@mfedang-virtual-machine:~# echo $name
db db
root@mfedang-virtual-machine:~# echo $aa
123456789
root@mfedang-virtual-machine:~#

# 可以使用set命令来查看环境中的所用变量
root@mfedang-virtual-machine:~# set | more
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote
:force_fignore:globasciiranges:histappend:interactive_comments:login_shell:progc
omp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=([0]="0")
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_VERSINFO=([0]="2" [1]="11")
BASH_LINENO=()
BASH_REMATCH=([0]="\\$a" [1]="\\$" [2]="" [3]="a")
BASH_SOURCE=()
BASH_VERSINFO=([0]="5" [1]="1" [2]="16" [3]="1" [4]="release" [5]="x86_64-pc-lin
ux-gnu")
BASH_VERSION='5.1.16(1)-release'
COLUMNS=80
COMP_WORDBREAKS=$' \\t\\n"\\'><=;|&(:'
DEBUGINFOD_URLS=
DEFAULT_XDG_CONFIG_DIRS=/etc/xdg
DEFAULT_XDG_DATA_DIRS=/usr/local/share/:/usr/share/
DIRSTACK=()
EUID=0
GROUPS=()

# 使用unset name 可以删除变量

4.2.环境变量

4.2.1.环境变量是什么

用户自定义变量只在当前的shell中生效,而环境变量会在当前shell和这个shell的所有子shell中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的shell中生效。

4.2.2.设置环境变量

# 申明变量
export 变量名=变量值
# 查询变量
env
# 删除变量
unset 变量名
# 示例
root@mfedang-virtual-machine:~# name=db
root@mfedang-virtual-machine:~# export age=20
root@mfedang-virtual-machine:~# sex=man
#这里我在父shell中创建了两个局部变量和一个全局变量
使用set命令可以查看我设置的变量信息
age=20
name=db
sex=man
使用bash,创建一个子shell
使用pstree命令查看当前在哪个shell中
-dropbear-+-dropbear---bash---bash---pstree
再一次使用set命令发现只能查看全局变量了
age=20

4.2.3.系统常见环境变量

PATH:系统查找命令的路径
root@:~# echo $PATH
/opt/qemu/bin:/usr/bin:/bin:/snap/bin
# 环境变量叠加
PATH="$PATH":/root/sh
  • PS1:定义系统提示符的变量

#根据这个方式我可以改变系统前面显示的内容
# 示例
root@mfedang-virtual-machine:~# echo $PS1
\\[\\e]0;\\u@\\h: \\w\\a\\]${debian_chroot:+($debian_chroot)}\\u@\\h:\\w\\$
root@mfedang-virtual-machine:~# PS1='[\\u \\W]\\$ '
[root ~]# ls
ls.txt  ls2.txt  lserorr.txt  qemu-aarch64-static  sh  snap  test  testfile
[root ~]# cd sh/
[root sh]#

4.3.位置参数变量

4.3.1位置参数变量

# 示例 创建一个脚本文件
#!/bin/bash

echo "A total of $# parameters"

echo "The parameters is:$*"

echo "The parameters is:$@"

# 运行该脚本
[root sh]# ./show.sh 2321 2313
A total of 2 parameters
The parameters is:2321 2313
The parameters is:2321 2313

# $*和 $#的区别
#!/bin/bash

for i in "$*"
do
        echo "the parameters is $i"
done
x=1
for y in "$@"
do
        echo "the parameters is $y"
done

[root sh]# ./show2.sh 555 5555s sss
the parameters is 555 5555s sss   #$*会一下将参数全部打印,不进行循环打印
the parameters is 555
the parameters is 5555s
the parameters is sss   # $#会将参数循环打印出来

4.4.预定义变量

4.4.1.预定义变量

# 常用的是$?这个变量,判断前一个命令是否正确
[root sh]# lsd && ls
Command 'lsd' not found, but can be installed with:
snap install lsd
# 比如这里,就是根据返回值来确定命令是否执行正确的。

4.4.2.接收键盘输入

read [选项] [变量名]
选项:
-p "提示信息":在等待rend输入时,输出提示的信息
-t 秒数:rend命令会一直等待用户输入,使用此选项可以指定等待时间
-n 字符数:rend命令只接受指定的字符数,就会执行
-s:隐藏输入的数据,适用于机密信息的输入

[root sh]# cat showname.sh
#!/bin/bash

read -t 30 -p "please print your name:" name
echo "name is $name"

read -t 30 -s -p "please print your age:" age
echo -e "\\n"
read -n 1 -t 30 -p "please print your gender[M/W]:" gender
echo -e "\\n"
echo "$name is a $age $gender"

[root sh]# ./showname.sh
please print your name:db
name is db
please print your age:

please print your gender[M/W]:M

db is a 20 M

5.Bash的运算符

5.1.数值运算与运算符

5.1.1.declare声明变量类型

declare [+/-] [选项] 变量名
选项:
-:给变量设定类型属性
+:取消变量的类型属性
-i:将变量声明为整数型(integer)
-x:将变量声明为环境变量
-p:显示指定变量的被声明的类型 
# 示例
# 如果我设定了两个变量 aa=11,bb=22,想要做到cc=$aa+$bb
[root sh]# aa=11
[root sh]# bb=22
[root sh]# cc=$aa+$bb
[root sh]# echo $cc
11+22
# 单纯的这样加减是行不通的,这里就要使用到declare
[root sh]# declare -i cc=$aa+$bb
[root sh]# echo $cc
33
# 使用declare 将cc声明为整数型,就可以进行加减了,因为我们变量一开始默认都是字符串型的

# 方法2:expr或let数值运算工具
[root sh]# dd=$(expr $aa + $bb) 注意+两端必须有空格
[root sh]# echo $dd
33
# 方法3:$((运算式)) or $[运算式] (常用)
[root sh]# gg=$(($aa+$bb))
[root sh]# ff=$[$aa+$bb]
[root sh]# echo $aa $bb
11 22
[root sh]# echo $gg $ff
33 33

5.1.2.运算符

5.2.变量测试与内容替换

这个完全可以自己写判断语句,简便方法了解一下即可。

6.环境变量配置文件

6.1.环境变量配置文件简介

6.1.1.source命令

source 配置文件
or
.配置文件
修改了配置文件,可以使用source命令,让配置文件直接生效

6.1.2.环境变量配置文件简介

  • 环境变量配置文件中主要是定义对系统的操作环境生效的系统默认环境变量,比如PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量。
  • /etc/profile
  • /etc/profile.d/*.sh
  • ~/.bash_profile
  • ~/.bashrc
  • /etc/bashrc

在/etc目录下的环境变量是对当前Linux系统所有用户都生效的

6.2.环境变量配置文件作用

环境变量调用优先级:

# 注意Ubuntu中.bash_profile 是 .profile

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi
# 目的是为了判断 .bashrc 是否存在,存在就执行他

6.3.其他配置文件和登录信息

6.3.1.注销时生效的环境变量配置文件

~/bash_logout # 这个我的系统中没有,但是可以自定义

~/.bash_history

/etc/issue 可以通过转义符来显示刚登陆上来的显示信息,远程登录不支持

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

武汉市电子信息与通信工程职称公示了

2024年武汉市电子信息与通信工程专业职称公示了&#xff0c;本次公示通过人员有109人。 基本这已经是今年武汉市工程相关职称最后公示了&#xff0c;等待出证即可。 为什么有人好奇&#xff0c;一样的资料&#xff0c;都是业绩、论文等&#xff0c;有的人可以过&#xff0c;有的…

ModelScope-Agent(3):docker启动

目录 前两篇并没有使用到docker,但我看项目中是有docker配置的&#xff0c;不过没有在教程中写出来。学习了ragflow的docker配置流程之后&#xff0c;试一下modelscope-agent的配置。 先创建model-scope的cuda环境 conda create --name modelscope-agent python3.10 conda acti…

如何高效获取Twitter数据:Apify平台上的推特数据采集解决方案

引言 在数据分析和市场研究领域&#xff0c;Twitter&#xff08;现在的X&#xff09;数据一直是重要的信息来源。但是&#xff0c;自从Twitter更改API定价策略后&#xff0c;获取数据的成本大幅提升。本文将介绍一个经济实惠的替代方案。 为什么需要Twitter数据&#xff1f; …

MySql 中的解决某列中多个字段查询是否存在指定某个值, FIND_IN_SET 用法。

简言&#xff1a;今天公司数据库里面有个列是多个数据拼接而成的比如&#xff1a;**“,131113,749932833,749932825,749932826,749932827,749932828,749932829,”**想要通过sql 查找749932833值的列&#xff0c;很多同学第一想到的就是like 模糊匹配&#xff0c;模糊匹配不能保…

go引用包生成不了vendor的问题

比如我要引入github.com/jinzhu/gorm这个包. 1. 首先获取包 go get github.com/jinzhu/gorm 这时go.mod文件中也有这个包依赖信息了. 2. 然后构建vendor go mod vendor 结果发现vendor目录下没有生成对应的包, 而且modules.txt也注释掉这个包了. 原因是没有其进行引用, go…

基于 SSM 框架 Vue 电脑测评系统:引领电脑评测新方向

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

知识分享第三十天-力扣343.(整数拆分)

343 整数拆分 给定一个正整数 n&#xff0c;将其拆分为至少两个正整数的和&#xff0c;并使这些整数的乘积最大化。 返回你可以获得的最大乘积。 示例 1: 输入: 2 输出: 1 解释: 2 1 1, 1 1 1。 示例 2: 输入: 10 输出: 36 解释: 10 3 3 4, 3 3 4 36。 说明: 你可…

Nginx常用配置详解(1)

Nginx常用配置详解 一、全局块&#xff08;main&#xff09;配置 在Nginx的配置文件中&#xff0c;最外层的部分是全局块。这部分配置通常会影响Nginx服务器整体的运行参数。 worker_processes 作用&#xff1a;这个配置指令用于指定Nginx工作进程的数量。工作进程是Nginx处理…

力扣2300.咒语和药水的成功对数(二分法)

根据 灵茶山艾府 题解所写 题目描述&#xff1a; 给你两个正整数数组 spells 和 potions &#xff0c;长度分别为 n 和 m &#xff0c;其中 spells[i] 表示第 i 个咒语的能量强度&#xff0c;potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药…

电商大数据的几种获取渠道分享!

在当今数字化时代&#xff0c;电商大数据已成为企业决策和运营的重要基础。如何高效地获取、分析和利用这些数据&#xff0c;对于提升电商企业的竞争力至关重要。本文将详细介绍几种电商大数据的获取渠道&#xff0c;帮助电商从业者更好地掌握数据资源&#xff0c;提升业务洞察…

CQRS Design Pattern in Microservices - CQRS模式

原文链接 CQRS Design Pattern in Microservices - GeeksforGeeks 【文章看起来像是AI写的。。。 &#x1f602;&#x1f602;&#x1f602;】 简介 实现步骤 1&#xff0c;识别有界上下文&#xff1a;&#xff08;Identify Bounded Contexts:&#xff09; 2&#xff0c;命…

c语言----选择结构

基本概念 选择结构是C语言中用于根据条件判断来执行不同代码块的结构。它允许程序在不同的条件下执行不同的操作&#xff0c;使程序具有决策能力。 if语句 单分支if语句 语法格式&#xff1a; if (条件表达式) { 执行语句块; } 功能&#xff1a; 当条件表达式的值为真&#…

RK3588 , mpp硬编码rgb, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBUbuntu x64 架构, 交叉编译aarch64 FFmpeg mppCode Init MppMPP_RET init_mpp

uniapp blob格式转换为video .mp4文件使用ffmpeg工具

前言 介绍一下这三种对象使用场景 您前端一旦涉及到文件或图片上传Q到服务器&#xff0c;就势必离不了 Blob/File /base64 三种主流的类型它们之间 互转 也成了常态 Blob - FileBlob -Base64Base64 - BlobFile-Base64Base64 _ File uniapp 上传文件 现在已获取到了blob格式的…

【Linux运维】配置ssh免密登录

1.场景描述 内网环境&#xff0c;需要同步17服务器的文件到10服务器进行备份。因为每次输入密码比较繁琐&#xff0c;如果实现免密登录后&#xff0c;即可简化脚本。 要求&#xff1a;需要2台服务器-免密登录 2.方案分析 &#xff08;1&#xff09;现状&#xff1a;登录需要输…

使用Python从阿里云物联网平台获取STM32温度数据

在物联网&#xff08;IoT&#xff09;应用中&#xff0c;设备数据的采集与监控至关重要。本文将详细介绍如何使用Python从阿里云物联网平台获取STM32设备的温度数据。我们将从已有的Java代码出发&#xff0c;逐步将其转换为Python&#xff0c;并处理在过程中遇到的问题&#xf…

职场上,如何做好自我保护?

今天我们讨论一个话题&#xff1a;在职场上&#xff0c;如何保护好自己&#xff1f;废话不多说&#xff0c;我们直接上干货。 &#xff08;一&#xff09; 1.时刻准备一点零食或代餐&#xff0c;如果遇到长时间的会议&#xff0c;就补充点能量。代餐最好选流体&#xff0c;这…

网络编程 02:IP 地址,IP 地址的作用、分类,通过 Java 实现 IP 地址的信息获取

一、概述 记录时间 [2024-12-18] 前置文章&#xff1a;网络编程 01&#xff1a;计算机网络概述&#xff0c;网络的作用&#xff0c;网络通信的要素&#xff0c;以及网络通信协议与分层模型 本文讲述网络编程相关知识——IP 地址&#xff0c;包括 IP 地址的作用、分类&#xff…

tryhackme-Pre Security-HTTP in Detail(HTTP的详细内容)

任务一&#xff1a;What is HTTP(S)?&#xff08;什么是http&#xff08;s&#xff09;&#xff09; 1.What is HTTP? (HyperText Transfer Protocol)&#xff08;什么是 HTTP&#xff1f;&#xff08;超文本传输协议&#xff09;&#xff09; http是你查看网站的时候遵循的…

UDP网络编程套接

目录 本文核心 预备知识 1.端口号 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 sockaddr结构 UDP套接字编程 服务端 客户端 TCP与UDP传输的区别 可靠性&#xff1a; 传输方式&#xff1a; 用途&#xff1a; 头部开销&#xff1a; 速度&#xff1a; li…