Linux的shell(极其粗糙版)

Shell脚本:

脚本主要是为了业务,辅助人工,实现自动化运维

Shell:介于用户和内核之间,充当翻译官的作用,当用户执行相关的命令,shell会把指令二进制传给内核,内核处理完毕以后通过shell把内核的执行结果,转换成人类能够识别的语言

Linux中的shell种类:

Sh:已淘汰

Bash:默认的shell,是sh的扩展

Csh:类C语言的shell

Tcsh:整合了csh的功能,也包括一部分shell的功能

在默认情况下,我们使用的shell都是bash解释器

Nologin:这也是一种shell,作用只有一个就是禁止用户登录主机

Shell语言又称脚本语言:动态语言,主要用来控制软件和应用程序,一般都是以文本的形式保存,运行时才会进行编译

Shell脚本的作用:

  1. 自动化运维
  2. 批量化重复操作
  3. 可以减轻管理人员的工作量
  4. 提供业务处理的速度
  5. 脚本写完之后,都是经过调试,没有问题才会上线部署,在配置的过程中减少了出错的概率

Shell脚本的构成:

三部分组成:

  1. 脚本申明(解释器)
  2. 注释信息,shell脚本已#为开头,表示注释信息不会被运行

注释:可以帮助工作人员更好的理解代码的架构

  1. 可执行语句

shell脚本当中:所有Linux的命令行可以执行命令,都可以做为脚本的可执行语句

Shell脚本的执行方式:

赋权执行:给脚本执行权限

Chmod 777 first.sh

./表示执行当前目录下的可执行文件,但是这个文件必须要有执行权限

./first.sh

/opt/first.sh

这两种不行要有执行权限不然不成功

直接执行:一般用于调试脚本的内容

Bash first.sh

Sh first.sh

Source:这是点命令,也就是符号,是bash的内部命令,重新执行刚修改完的初始化文件,可以让命令在配置文件中立刻生效,无须重启

Bash sh ./ 这三种都是运行,运行代码,反馈结果

Source:执行,执行脚本中的命令,脚本当中的代码会被真正的执行,展示真正的结果

都是有结果,一个没有过程,一个有过程

重定向:

交互式硬件设备的执行方式:

  1. 标准输入:设备是键盘,而且输入的结果符合编码规范
  2. 标准输出:设备是显示器,符合编码规范的命令,给予执行结果
  3. 标准错误输出:设备是显示器,不符合编码规范的结果,给予错误输出的执行结果

Echo 123 >123

这是重定向输出:> 把标准输入保存到指定的文件中,会覆盖原有内容

>> 把标准输入保存到指定文件的尾部,相当于行后追加,不覆盖原有内容

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

2>> 将错误信息保存到指定的文件的尾部,不会覆盖原有的内容

混合输出:&>既可以保存标准输出也可以保存标准错误输出到指定文件,会覆盖原有内容

&>>既可以保存标准输出也可以保存标准错误输出到指定文件的尾部,不会覆盖原有内容

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

Shell的变量:

面向对象:

变量:描述对象属性或者参数。Shell的变量是存放系统和用户需要使用的特点参数与值

变量的类型:int:整数 string:字符串 truefalse:布尔类型 浮点:1.23

变量名称:有固定名称的变量,一般是系统预设

自定义的变量名:不要使用系统命令作为变量名

不要使用中文

不能使用特殊符合开头 ,只有_可以做开头

不要使用数字开头

不需要声明变量类型,直接赋值就可以

变量赋值时,引号的用法:

强引用和弱引用:

打印变量时。加上双引号是弱引用

加上单引号是强引用,¥text,就会被认为是普通字符串。打印的结果也是字符串

赋值变量时,双引号和单引号没有任何区别

反撇号:`` 先执行反撇号当中的命令,然后再命令运行的结果赋值变量

自定义变量的类型:

一般自定义:

A=1

B=2

只读变量:他是不可以重新赋值的

Readonly 他只能重启或者bash才能删除

Read 通过命令获取内容,然后给变量赋值

Read -p "一定要加上提示字符" 变量名

变量的作用范围:

自定义变量只在当前的shell环境生效

全局变量(自定义的):1.系统预设的全局变量,对所有用户都能生效

  1. 自定义全局变量
  2. 临时声明全局,也是在当前shell生效

一般来说,我们自定义变量可能需要根据条件时常修改,以满足不同的条件,一旦作为全局变量,引用的值或者参数不需要变的

全局变量是所有人都可以引用,会导致程序状态的不确定性

环境变量:1.系统预设,用来设置用户的工作环境

  1. 自定义环境变量,主要是用于满足个人需求的工作环境,可以随时创建,随时修改,随时删除

系统可以识别到用户所需的操作指定,可以直接运行调用

位置变量:命令行参数

在脚本运行时,从脚本的外部通过位置变量给脚本内部的程序传参

¥n 这的n是数字1-9

10以上要用{10}

传参的顺序是从左向右

$0,特殊的位置变量,表示命令本身

/first.sh 10 20

0 1 $2

预定义变量:编程语言或者脚本解释器提供的,自动设置,自动更新,只能用不能修改

\* @ # ?

\*与@:表示命令或者脚本需要处理的参数

$*:不加引号,会把参数一个一个处理,加上引号,会当成整体处理

$@:加不加引号,都会将参数一个一个处理

\*与@,在不加引号的时候表现一致

$#:特殊的预定义变量,表示传递给脚本有几个参数,就是统计传递了多少个参数

$?:表示前一条命令的返回状态码,只有0表示执行成功或者执行正确,所有非0一律表示执行出现异常

Shell当中的变量的运算符:

运算符:+ - * / % 加 减 乘 除整 取余

整数运算:

I=$((12+5))

I=(expr 12 \\\* 5)#这边乘是特殊方式其他都是这种I=(expr 12 + 5)

I=$[12/5] #此方式已经弃用

Let i=12*5

I++:每次自增1,先赋值,再加1

  1. -:

++i:每次自增1,先再加1,在赋值

--I:

非整数运算:

Bc linux自带的计算器 例如:echo 2*2 | bc

Awk 例如:num=$(awk 'BEGIN{print (45+87)*2+3}')

脚本执行实验

配置文件vim first.sh

#!/bin/bash

#this is my first shell!

Cd /boot

Echo "当前的目录位置:"

Pwd

Echo "其中以vml开头的文件包括:"

Ls -lh vml*

:wq!保存

输出实验

Echo 123 > index.html

Cat index.html

Echo 123 >> index.html

Echo 123 &> index.html

Echo 123 &>> index.html

重定向输入实验

Echo "1" > pass.txt

Cat pass.txt

Passwd --stdin lmn < pass.txt

自定义变量实验

A=1

Echo $a #这是打印变量值

A=test

Echo $a

A=1

B=1

Echo a b

Echo {a} {b}

引号实验:

Text='123'

Echo $text

Echo "$text"

反撇号实验:

A=`ls -lh`

Echo $a

只读变量实验:

A=1

Readonly a=1

Nuset b#这是删除变量

Read -p实验:

配置文件vim first.sh

Read -p "输入一个变量名:" num1

Read -p "请再输入一个变量名:" num2

Sum=((num1+$num2))

Echo $sum

:wq!

Export a=4

Export b=8

Vim text.sh

C=((a+$b))

e

Bash text.h

Vim /etc/profile #全局配置文件,对所有用户生效

Export a=10

Export b=20

Source /etc/profile

Evn #查看环境变量

Echo $USER#这是用户名环境变量

Echo $HOME#查询当前用户的家目录

Echo $LANG#查询语言和字符集

Echo $PWD#查询当前所在的目录

Echo $PATH

环境变量类似于全局变量。和全局变量作用一致,环境变量系统识别直接调用,

PATH="$PATH:/root"

Export PATH="$PATH:root"

Cd ~

Ls

Touch 123.sh

Chmod 777 123.sh

Cd /opt/

Cd /etc/

Cd /etc/sysconfig/

  1. Sh

\*与@实验:

Vim first.sh

Abc() {

For i in "$@"

Do

Echo $i

done

}

Abc "hello" "world" "!"

:wq!

Vim first.sh

Abc() {

For i in $@

Do

Echo $i

done

}

Abc "hello" "world" "!"

:wq!

Vim first.sh

Abc() {

For i in "$*"

Do

Echo $i

done

}

Abc "hello" "world" "!"

:wq!

Vim first.sh

Abc() {

For i in $*

Do

Echo $i

done

}

Abc "hello" "world" "!"

:wq!

相关推荐
虾..5 小时前
Linux 软硬链接和动静态库
linux·运维·服务器
Evan芙5 小时前
Linux常见的日志服务管理的常见日志服务
linux·运维·服务器
hkhkhkhkh1237 小时前
Linux设备节点基础知识
linux·服务器·驱动开发
HZero.chen8 小时前
Linux字符串处理
linux·string
张童瑶8 小时前
Linux SSH隧道代理转发及多层转发
linux·运维·ssh
汪汪队立大功1238 小时前
什么是SELinux
linux
石小千8 小时前
Linux安装OpenProject
linux·运维
柏木乃一9 小时前
进程(2)进程概念与基本操作
linux·服务器·开发语言·性能优化·shell·进程
Lime-30909 小时前
制作Ubuntu 24.04-GPU服务器测试系统盘
linux·运维·ubuntu
百年渔翁_肯肯9 小时前
Linux 与 Unix 的核心区别(清晰对比版)
linux·运维·unix