Shell变成规范与变量

目录

[1. Shell脚本](#1. Shell脚本)

[1.1 Shell脚本概述](#1.1 Shell脚本概述)

[1.2 Shell的作用](#1.2 Shell的作用)

[1.3 Shell脚本的构成](#1.3 Shell脚本的构成)

[2. 重定向与管道操作](#2. 重定向与管道操作)

[2.1 交互式硬件设备](#2.1 交互式硬件设备)

[​ 2.2 重定向操作](#2.2 重定向操作)

[3. shell变量](#3. shell变量)

[3.1 自定义变量](#3.1 自定义变量)

[3.2 变量的作用范围​编辑](#3.2 变量的作用范围编辑)

[3.3 整数变量的运算](#3.3 整数变量的运算)

[4. 环境变量](#4. 环境变量)

[4.1 特殊的Shell变量](#4.1 特殊的Shell变量)

[4.2 只读变量](#4.2 只读变量)


1. Shell脚本

1.1 Shell脚本概述

(1)Shell脚本概念

(2)shell脚本应用场景

1.2 Shell的作用

Shell的作用------命令解释器,"翻译官"

介于系统内核与用户之间,负责解释命令行

Shell(壳程序)是一个特殊的应用程序,它介于操作系统内核与用户之间,充当了一个"命令解释器"的角色,负责接收用户输入的操作指令(命令)并进行解释,将需要执行的操作传递给内核执行,并输出执行结果。

查看系统中shell类型

最常用的就是bash、tcsh、csh、sh、nologin这些shell

/bin/bash和/bin/sh都是bash的软连接,都指向bash

  • sh:已经被bash所替换,是bash的前身;

  • nologin:奇怪的shell,这个shell可以让用户无法登录主机;

  • bash(/bin/bash)是目前大多数Linux版本采用的默认Shell.

为什么系统上合法的Shell要写入/etc/shells这个文件呢?

这是因为系统某些服务运行过程中,会去检查用户能够使用的Shell,而这些shell的查询就是借由/etc/shells这个文件。

用户什么时候可以取得shell来工作?用户默认会取得哪一个shell?

当用户登录的时候,系统就会给我一个shell让我来用,而这个登录取得的Shell就记录在/etc/passwd这个文件内。

1.3 Shell脚本的构成

(1)脚本申明(解释器):若第一行为" #!/bin/bash",表示此行以下的代码语句是通过/bin/bash程序来解释执行,#!/bin/bash为默认解释器。还有其它类型的解释器,比如#!/usr/bin/python、#!/usr/bin/expect。

(2)注释信息:以"#"开头的语句表示为注释信息,被注释的语句在运行脚本时不会被执行。

1.4 编写Shell脚本

(1)编写脚本代码

使用vim编辑器

(2)执行shell脚本

方法一:指定路径的命令,要求文件必须有x权限。

  • 指定绝对路径:/root/first.sh

  • 指定相对路径:./first.sh

方法二:指定shell来解释脚本,不要求文件必须有x权限。

sh 脚本路径: sh first.sh

source 脚本路径: . first.sh 或者 source first.sh

bash和sh命令执行脚本文件;

注意:指定路径以及sh、bash执行脚本的方式,会在子shell环境中运行,不会影响当前所在目录、变量的值等因素;而"."和source命令执行脚本的方式,是在当前shell环境中运行,会影响当前所在目录、变量的值 等因素。

2. 重定向与管道操作

2.1 交互式硬件设备

2.2 重定向操作

重定向输入:<,从指定文件读取数据

重定向输出:>,将输出结果保存到指定文件,会覆盖文件中原有内容

重定向追加:>>,将输出结果追加到指定文件的尾部,可以实现合并两个文件的效果

标准错误输出:2>,将错误信息保存到指定的文件中,会覆盖文件中原有的内容

混合输出:&>将代码正确执行的内容标准输出到指定文件中,或者将错误信息保存到指定文件

混合输出的补充知识:(2>&1:将标准错误输出重定向到标准输出) 面试考试题

复制代码
ls -lh > test.txt 2>&1    

ls -ln 标准输出 到屏幕
ls -ln > test.txt 重定向输出到 text.txt  1 -->  test.txt
2>&1   错误输出 重定向到 标准输出

3. shell变量

3.1 自定义变量

定义变量

下划线开头定义变量

题目:要求将a和b名字交换

解:准备一个临时变量$c,

read -p "提示内容" 变量名 #从键盘输入中获取变量值

`...` $(...) 提取里面的命令执行后的结果

3.2 变量的作用范围

让自定义的变量在所有shell环境中有效的方法:

1)在 /etc/profile 文件中定义 export 变量名=变量值
source /etc/profile 立即生效 或 重新登录系统自动生效

2)在 /etc/bashrc 文件中定义 变量名=变量值
切换 shell 环境自动生效

3.3 整数变量的运算

进行整数变量的运算

echo (expr 整数1 运算符 整数2) (expr 变量1 运算符 变量2) + - \* /

echo \[整数1 运算符 整数2\] [变量1 运算符 变量2] + - * / %

echo ((整数1 运算符 整数2)) ((变量1 运算符 变量2)) + - * / %

使用let关键字进行整数变量的运算(必须要赋予给变量值)

浮点数运算

方法一

方法二

4. 环境变量

4.1 特殊的Shell变量

env 查看当前shell环境中所有可用的环境变量​​​​​​​

echo $HOME:查看当前用户的家目录

4.2 只读变量

readonly 变量名=变量值

4.3 位置变量

4.4 预定义变量

$? 代表的是上一条Linux命令执行的返回状态码(0~255),0表示上一条命令执行正确,非0值则表示上一条命令执行异常

\* 默认代表脚本后面跟的所有参数,加上双引号后 "*" 会把所有参数看做一个整体
@ 默认代表脚本后面跟的所有参数,加上双引号后 "@" 还是会把每个参数看做一个个体

相关推荐
Leo.yuan41 分钟前
数据湖是什么?数据湖和数据仓库的区别是什么?
大数据·运维·数据仓库·人工智能·信息可视化
程序员JerrySUN1 小时前
Linux 内核内存管理子系统全面解析与体系构建
java·linux·运维
CIb0la1 小时前
Ai自动补全编程工具:llama vscode
运维·开发语言·学习·测试工具·程序人生
rui锐rui1 小时前
大模型模型部署和暴露接口
linux·运维·服务器
BJ_Bonree2 小时前
博睿数据×华为, 共筑智慧金融新未来
运维
孙克旭_2 小时前
day030-Shell自动化编程-函数
linux·运维·自动化
IT葛大侠2 小时前
OSPF域内路由
运维·网络·计算机网络
面朝大海,春不暖,花不开4 小时前
管理数据洪流:自动化处理与归档每日数据文件的策略与实践
运维·python·自动化
地衣君11 小时前
RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
linux·ubuntu·risc-v
5:0011 小时前
云备份项目
linux·开发语言·c++