RHCE---Shell基础 2

文章目录

  • 目录

    文章目录

    前言

    一.变量

    概述

    定义

     自定义变量

    环境变量 

     概述:

    定义环境变量: 

    位置变量

    "$*"会把所有位置参数当成一个整体(或者说当成一个单词 

     变量的赋值和作用域 

     read 命令

    变量和引号 

    变量的作用域  

     变量的运算符

    总结


前言

前文初步介绍了shell脚本的基础知识,本章我们将通过引入一些新的知识和例题,学会完成一些简单的shell脚本编写。


一.变量

概述

       在shell脚本中,变量是一个可用于存储或检索值的名称。变量可以是数字、字符串或其他类型的数据。在shell脚本中,变量通常以美元符号($)开头,后跟变量名称。

定义

  • 原则:直接使用,不需要变量声明
  • 格式:变量名=变量的值

例 1:

[root@server ~]# vim test2.sh
#脚本抬头
#!/bin/bash
# 定义变量c
c="hello world"
# 定义路径
bak_dir=/data/backup
[root@server ~]# bash test2.sh
hello world

例2: 

在shell脚本中,let命令用于执行整数运算,并将结果赋值给变量。可以理解为是一种执行算术运算的快捷方式。

[root@timeserver ~]# bash test3.sh
x=123
let "x=x+1"  #let:使shell脚本识别变量,不使用let时x会被识别为字符串
y=$x         
echo "$y"
[root@timeserver ~]# 
124 #不加let 输出为 x+1
  •  = 前后不能收空格
[root@server ~]# a= 3
bash: 3: command not found...
[root@server ~]# b =5
bash: b: command not found...
  •  字符串类型建议使用双引好作为定界符引起,尤其是字符串中有空格
[root@server ~]# stu_name=zhang san
bash: san: command not found...
[root@server ~]# stu_name="zhang san"
[root@server ~]# stu_name='zhang san'

 自定义变量

  • 概念:上述以赋值形态形成的变量定义形式称为自定义变量

 查看变量:set 

取消环境变量:unset 

环境变量 

 概述:

    环境变量是操作系统中一个重要的概念,它用来存储一些在操作系统级别下用到的值,比如路径、用户名、密码等。在Linux系统中,环境变量存储在系统中的一个地方,每个终端都可以访问它们。

一些常用的环境变量包括:

  1. PATH:用于指定可执行程序的搜索路径。
  2. HOME:指定当前用户的主目录。
  3. SHELL:指定当前用户使用的Shell程序。
  4. USER:指定当前用户的用户名。
  5. LANG:指定当前系统使用的语言环境。

定义环境变量: 

方法 1:export 环境变量=值

方法 2 :变量名=值

               export 变量名

方法 3:declare  -x   变量名=值

显示当前用户的环境变量:env  

位置变量

 概念:当一条命令或脚本执行时,后面可以跟多个参数,可以使用位置变量来表示该参数

[root@timeserver ~]# vim test3.sh
echo "第2个位置参数时:$2"
echo "第1个位置参数时:$1"
echo "第4个位置参数时:$4"
echo "所有位置参数时:$*"
echo "位置参数个数时:$#"
echo "当前进程的PID值:$$
[root@timeserver ~]# bash test3.sh 1 2 3 4 5
第2个位置参数时:2
第1个位置参数时:1
第4个位置参数时:4
所有位置参数时:1 2 3 4 5
位置参数个数时:5
当前进程的PID值:36113

常见的位置变量:

  • $0 : 脚本名
  • $1-$9 : 1-9个参数
  • ${10} :10以上的参数需要大花括号括起
  • $* : 所有参数
  • $@ : 所有参数
  • $# : 参数个数
  • $$ : 当前进程的PID
  • $! : 上一个后台进程的PID
  • $? : 上一个命令
  • 的返回值状态码,0为成功

$*和$#区别

  • "$@"会把所有位置参数当成一个单独的字段 
  • "$*"会把所有位置参数当成一个整体(或者说当成一个单词 

 [root@server ~]# set  --  I am test  command [root@server ~]# for  i  in  "$@"; do  echo  $i; doneIam5testcommand[root@server ~]# for  i  in  "$*"; do  echo  $i; done I am test command

 变量的赋值和作用域 

 read 命令

概述:

  • read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量
  • 量格式:read -参数 变量名
  • 参数
-p   “提示语句:”   屏幕打印出一行提示语句。
-n数字:当输入的字符数目达到预定数目时,自动退出,并将输入的数据赋值给变量,如:-n1 , 只要接受到 一个字符就退出。只要按下一个字符进行回答,read命令立即接受输入并将其传给变量。无需按回车键
-t   等待时间 :计时输入,使用read命令存在着潜在危险。脚本很可能会停下来一直等待用户的输入。如果 无论是否输入数据脚本都必须继续执行,那么可以使用-t选项指定一个计时器。-t选项指定read命令等 待输入的秒数。当计时满时,read命令返回一个非零退出状态
-s :关闭回显,使read命令中输入的数据不显示在监视器上(实际上,数据是显示的,只是read命令将文本颜 色设置成与背景相同的颜色)常用格式:read  变量名 read  -p  "提示信息:"   变量名

例1:

[root@server ~]# read -p "Enter Numbers: " num
Enter Numbers: 9527
[root@server ~]# echo $num
9527
[root@server ~]# read -t 3 n1   # 不要输入内容,等待3秒后自动结束输入
[root@server ~]# read -s -p "Enter your password: " passw
Enter your password: [root@server ~]# echo $passw 
123456
[root@server ~]# echo $REPLY
[root@server ~]# read
100
[root@server ~]# echo $REPLY   # 当输入时没有指定变量接收,会默认存储到REPLY变量中
100
# 一次性输入多个变量的值
[root@server ~]# read t1 t2
12 35
[root@server ~]# echo $t1 $t2
12 35

 面试题总结四种复制方法:

1.直接赋值:name="li si"
2.read命令: read name
3.使用位置参数($1 $2 $3…) : name=$1
4.命令输入:name=$(whoami)  

变量和引号 

  1. 单引号(' '):单引号中的内容被视为纯文本,其中任何其他特殊字符(包括变量和命令替换)都会被视为普通字符。例如,单引号中的'$VAR'将被视为字符串'$VAR',而不是变量$VAR的值。
  2. 双引号(" "):双引号中的内容可以包含变量和命令替换,这些替换将被执行并被替换为其对应的值。双引号还可以用于转义特殊字符,例如$和\。
  3. 反引号/反撇号( 或者$()):在反引号或反撇号中的内容将被视为命令,该命令将被执行并返回其输出。该输出将被替换为反引号或反撇号中的内容。

变量的作用域  

全局变量:

全局变量指的是在整个脚本中都可访问的变量。这些变量可以在脚本的任何位置进行声明和赋值,并且可以在整个脚本的任何地方使用。

[root@server ~]# vim test5.sh
#!/bin/bash
func()   # 定义函数              1
{                                echo   "$v1"v1=200
}                                2
v1=100 
func    #调用函数                 3           
echo  "$v1"                      4
[root@server ~]# bash test5.sh 
100
200
#程序执行顺序:1-2之间为函数,首先装入内存,不调用,首先执行v1=100 接着调用函数
#当函数被调用后:首先执行echo   "$v1" 输出V1 由于函数内部没有定义V1 则到函数外部
#查找V1=100 输出100 接着执行V1=200,此时函数执行结束,接着执行echo  "$v1"  输出200

 局部变量:范围更小,仅限于某个程序段中,如:函数、shell等,通过local关键字定义

# 上例修改
[root@server ~]# vim test5.sh
#!/bin/bash
func()   # 定义函数
{local v3=200  # 使用local关键字声明为局部变量
}
func
echo  "$v3"
[root@server ~]# bash test5.sh#没有内容

 变量的运算符

例 1:

[root@server ~]# expr 1 + 1 # 注意+左右必须要有空格
2
[root@server ~]# expr 1+1   # 否则原样显示
1+1
[root@server ~]# a=1
[root@server ~]# b=2
[root@server ~]# expr $a + $b # 支持变量
3
[root@server ~]# let num=1+2   # let+echo 等价于expr
[root@server ~]# echo $num
3
[root@server ~]# let num=1 + 2   # 注意let中运算符左右不能由空格
-bash: let: +:语法错误: 需要操作数 (错误符号是 "+")
[root@server ~]# echo $((1+2))
3
[root@server ~]# echo $((5%3))
2
[root@server ~]# echo $((3%5))
3
[root@server ~]# echo $((1-5))
-4
[root@server ~]# echo $((2 * 5))   # 可以有空格
10
[root@server ~]# echo $((5.2-5))   # 只支持整数运算
-bash: 5.2-5:语法错误: 无效的算术运算符 (错误符号是 ".2-5")
[root@server ~]# echo $[2+3]   # [] 等价于 (())
5
[root@server ~]# echo $[2.5+3] # # 只支持整数运算
-bash: 2.5+3:语法错误: 无效的算术运算符 (错误符号是 ".5+3")
[root@server ~]# bc
bc 1.07.1
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006, 2008, 2012-2017 Free Software 
Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'. 
1.1+2
3.1
2.5-3.9
-1.4
1.5>4
0
5>3
1
quit  # 退出交互模式
# 不进入交互模式直接使用,bc需要放在最后
[root@server ~]# echo "scale=3;11/3" | bc   
3.66

 例 2:

# 返回变量长度
[root@server ~]# str1="hello world"
[root@server ~]# echo ${#str1}
11
# 变量截取
[root@server ~]# echo ${str1:0:3} # 从左边第1个字符开始截取3个
hel
[root@server ~]# echo ${str1::3} # 可以省略起始0
hel
[root@server ~]# echo ${str1:1} # 从下标1开始截取到尾部
ello world
[root@server ~]# echo ${str1:0-1:1} # 从右边第一个字符开始截取1个,左边第一个为0,右边第
一个为0-1
d
[root@server ~]# echo ${str1:0-5} # 从右边第5个开始截取到尾部
world
[root@server ~]# echo ${str1: -5} # 使用空格替代0,同上
world
[root@server ~]# echo ${str1:-5} # 没有空格表示提取整串
hello world

总结

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

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

相关文章

基于拦截器Interceptor实现简易权限控制及行为记录功能

一、业务需求 使用拦截器(Interceptor),实现Controller中方法的权限控制,并记录访问行为。要求仅在Controller方法上加注解,就可以实现权限控制。具体为: 1、拦截未登录用户的访问; 2、拦截不具有权限用户的访问&#…

Git教程

文章目录 Git 介绍GIt历史Git 安装环境配置工作区、缓存区和仓库区(版本库)工作区(工作目录)暂存区仓库区git工作目录下文件的装填 Git 生成公钥及添加到gitlab或Gerrit上Git常用命令git stautsgit statu -sgit addgit commitgit reset1. git reset --ha…

Post-Process1-水下

一、新建第三人称游戏项目,我这里选择C,你也可以选择Blueprint。 新建一个Level,命名为DemoUnderWater 保存一下,命名为DownUnderWater 添加水插件 选择Yes 勾选Show Engine Content和Show Plugin Content,在左侧可以看…

图(graph)的遍历----深度优先(DFS)遍历

目录 前言 深度优先遍历(DFS) 1.基本概念 2.算法思想 3.二叉树的深度优先遍历(例子) 图的深度优先遍历 1.图(graph)邻接矩阵的深度优先遍历 思路分析 代码实现 2.图(graph)邻接表的深度优先遍历 思路分析 代码实现 递…

【Web】| CSS Float (浮动)的使用方法

Float(浮动)概念 CSS的Float(浮动),会使得元素向左或者向右移动,其它周围元素也会重新排列。 Float浮动,往往是用于图像,但它的布局一样非常有效。 元素如何浮动 元素的水平方向…

【MySQL架构篇】MySQL字符集、大小写规范及默认数据库

文章目录 1. 字符集与字符集比较规则2. 大小写规范3. 默认数据库4. 与文件系统相关 1. 字符集与字符集比较规则 MySQL有4个级别的字符集和比较规则,分别是 服务器级别数据库级别表级别列级别 当创建对应表或列未指定字符集时,默认会取其上一级别的字符…

MySQL中的表操作,配置文件,储存引擎,数据类型

MySQL中的表操作 1 查库(已密码登陆mysql) show databases; 2 添加库 create database t1; 3 表操作 1选定操作库 use t1 2在库里添加表格式 create table t1(id int, name varchar(32), gender varchar(32),age int); 3往表里添加具体元素 insert…

OpenCV 笔记(2):图像的属性以及像素相关的操作

Part11. 图像的属性 11.1 Mat 的主要属性 在前文中,我们大致了解了 Mat 的基本结构以及它的创建与赋值。接下来我们通过一个例子,来看看 Mat 所包含的常用属性。 先创建一个 3*4 的四通道的矩阵,并打印出其相关的属性,稍后会详细…

django建站过程(2)创建第一个应用程序页面

创建第一个应用程序页面 设置第一个页面【settings.py,urls.py,views.py】settings.pyurls.pyviews.py django是由一系列应用程序组成,协同工作,让项目成为一个整体。前面已创建了一个应用程序baseapp,使用的命令 python manage.py startapp baseapps这…

2023全新小程序广告流量主奖励发放系统源码 流量变现系统

2023全新小程序广告流量主奖励发放系统源码 流量变现系统 分享软件,吃瓜视频,或其他资源内容,通过用户付费买会员来变现,用户需要付费,有些人喜欢白嫖,所以会流失一部分用户,所以就写了这个系统…

RustCC分享会|非凸科技与开发者共同探讨Rust安全进化

10月15日,非凸科技受邀参加RustCC联合多家开发者社区组织的Global Tour of Rust技术分享活动,旨在为Rust开发者提供交流互动的平台,分享Rust语言的知识、经验和最佳实践。 活动上,非凸科技成都分公司研发总监赵海峰以“Rust安全进…

系统架构师备考倒计时13天(每日知识点)

1. 数据仓库四大特点 面向主题的。操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织的。集成的。数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整…

TechSmith Camtasia 2023 for Mac 屏幕录像视频录制编辑软件

​ TechSmith Camtasia for Mac 2023中文破解版 是一款专业的屏幕录像视频录制编辑软件,非常容易就可以获得精彩的截屏视频。创建引人注目的培训,演示和演示视频。Camtasia 屏幕录制软件简化,直观,让您看起来像专业人士。利用Camt…

安卓使用android studio跨进程通信之AIDL

我写这篇文章不想从最基础的介绍开始,我直接上步骤吧. 1.创建服务端 1.1:创建服务端项目:我的as版本比较高,页面就是这样的 1.2:创建AIDL文件,右键项目,选中aidl aidl名字可以自定义也可以默认 basicTypes是自带的,可以删掉,也可以不删,然后把你自己所需的接口写上去 1.3:创建…

让uniGUI支持https

今天在专家的帮助下,成功的让uniGUI支持https了。 首先,去申请个**的证书。我同事去阿里申请的,申请回是一个zip文件,里面有两个文件,一个扩展是per,一个key 然后,把这两个证书文件放到uniGUI…

06、Python 序列 与 列表 与 元组 的关系和创建 和 简单使用

目录 序列元组与列表关系总结 创建元组与列表方式一创建元组注意点 创建元组与列表方式二简单使用通过索引访问元素子序列序列加法序列乘法in运算 了解Python序列 创建列表和元组 通过索引访问元素 子序列 序列运算 序列 所谓序列,指的是一种包含多项数据的数据结…

【蓝桥每日一题]-动态规划 (保姆级教程 篇11)#方格取数2.0 #传纸条

目录 题目:方格取数 思路: 题目:传纸条 思路: 题目:方格取数 (跑两次) 思路: 如果记录一种方案后再去跑另一个方案,影响因素太多了,所以两个方案要同时开…

FL Studio 21 for Mac中文破解版百度网盘免费下载安装激活

FL Studio 21 for Mac中文破解版是Mac系统中的一款水果音乐编辑软件,提供多种插件,包括采样器、合成器和效果器,可编辑不同风格的音乐作品,Pattern/Song双模式,可兼容第三方插件和音效包,为您的创意插上翅膀…

Unity3D 基础——鼠标悬停更改物体颜色,移走恢复

方法介绍 【unity学习笔记】OnMouseEnter、OnMouseOver、OnMouseExit_unity onmouseover_一白梦人的博客-CSDN博客https://blog.csdn.net/a1208498468/article/details/117856445 GetComponent()详解_getcomponet<> 动态名称-CSDN博客https://blog.csdn.net/kaixindrag…

uniapp 测试 app 到安卓模拟器部署方法以及常见错误解决 无废话

uniapp 测试 app 到安卓模拟器 1.1 安装安卓模拟器 https://www.yeshen.com/ 1.2 查看安装模拟器端口 右击夜神模拟器属性打开文件位置 在打开的文件夹找到 debugReport 双击运行查看运行出来的端口号 一般都是&#xff1a;62001 1.3 HBuilder 配置 选中项目运行运行到手机…