1、shell基础知识点


shell基本

shell基本 1

1. shell的基本介绍 2

1.1. 作用:用户与内核沟通的桥梁 2

1.2. shell脚本 2

1.3. shell最基础脚本以及执行环境 5

2. echo输出命令 7

2.1. 若果想输出空格需要加“”,echo "111 222" 7

2.2. echo -n 输出之后不换行 7

2.3. echo -e 支持控制字符 7

3. Bash知识点 9

3.1. Bash常用快捷键 9

3.2. 文件描述符 10

3.3. 输出输入重定向 11

3.4. 通配符 15

3.5. 变量和运算符 18

3.6. 变量分类(下一章详解) 19

4. 脚本数组和内置变量 20

4.1. 数组 20

4.2. eval 23

5. 函数 23

5.1. 作用:减少代码量,提高代码利用率,使脚本更加清晰可读 24

5.2. function 函数名(){} 24

5.3. 调用方式:直接调用行数名,先定义再调用 24

5.4. 有参函数和无参函数 24

6. shell调试知识点 30

6.1. bash +选项 30

6.2. 其他 33

shell的基本介绍

作用:用户与内核沟通的桥梁

分类:

第一类

bash
sh
csh

第二类

ksh

cat /etc/shells 查看当前系统中支持哪些shells

1、shell基础知识点

shell脚本

作用:将命令保存到文件中,统一执行

三p语言(解释型)

perl 解决问题的写法过多,不便于后期的团队协作,后缀.pl

python 后缀 .py

php 后缀.php

shell语言:

语言的分类

面向过程,面向对象
面向过程:shell、c
面向对象:python、java、c++
解释型、编译型
编译型:先编译,后运行 解释性:边翻译边运行
解释型语言:shell、python
编译型语言:c
强类型、弱类型
强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++等语言。
弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言。
动态语言,静态语言
动态:在运行时定义数据类型
静态:提前定义数据类型,整个过程中不能随意转换变量类型

shell脚本编写的实现方式:编译并输出脚本全部都在子shell下执行,输出结果后重新返回父shell,所以再脚本中定义的变量并不会再当前环境下输出

1、shell基础知识点

1、shell基础知识点

shell最基础脚本以及执行环境

脚本过程

vim hello.sh

1、shell基础知识点

第一行:#!/bin/bash (幻数,指定解释器)

执行方法

如果想要以路径执行,赋予执行权限chmod +x hello.sh,./hello.sh 或者/root/hello.sh

1、shell基础知识点

或者不赋予权限,直接 bash hello.sh或者sh hello.sh

1、shell基础知识点

当前shell环境执行shell脚本
此执行脚本方式不会退出当前环境变量,而是直接在当前环境变量中执行脚本
实例:


前两种执行方式都会并不会改变目录


脚本内容

1、shell基础知识点

1、shell基础知识点


而source或“.”可以在当前目录下执行脚本

1、shell基础知识点

注释

1、shell基础知识点

起到了解释说明的效果

echo输出命令

若果想输出空格需要加“”,echo "111 222"

echo -n 输出之后不换行

echo -e 支持控制字符

echo -e "\\"输出反斜杠(转义反斜杠)

\a 输出提示音(在etc/inputrc下setbell style-none注释删掉可以选择消除提示音)

\t 制表符隔开

\n 换行符

1、shell基础知识点

\v 垂直制表符

1、shell基础知识点

\x61八进制的61 输出a

字体操作

echo -e "\e[字体控制;字体背景颜色;文字颜色m 字符串 \e[0m"

字体控制:1高亮 4下划线 5闪烁 7背景字体颜色反转

字体颜色 其中30m黑色 31m红色 32m绿色 33m黄色 34m蓝色 45m洋红 36m青色 37m白色,如果相加背景颜色。41m-47m为相应的背景颜色

1、shell基础知识点

Bash知识点

Bash常用快捷键

ctrl+a 光标迅速移动到开头

ctrl+e 把光标移动到命令行尾

ctrl+c终止当前的进程

ctrl+d 退出当前终端

ctrl+l清屏

ctrl+u删除光标之前的内容

ctrl+w删除光标前一个单词

ctrl+k删除或剪切光标之后的内容

ctrl+y粘贴ctrl+u或者ctrl+k或者ctrl+w的内容

ctrl+r 进入历史命令搜索界面

文件描述符

内核(kernel)利用文件描述符(file descriptor)来访问文件

lsof -i :22

1、shell基础知识点

查看使用22端口号的进程和PID,FD中的”u“代表进程对指定的文件可读可写,如果是“r”则只可读

ulimit -n 查看用户最多可以使用的文件数(默认1024)

1、shell基础知识点

sysctl -a|grep "fs.file-max"显示系统级别最多能打开的文件数,僵尸进程就是占这个

1、shell基础知识点

输出输入重定向

设备文件名

键盘 /dev/stdin 0 标准输入

显示器 /dev/stdout 1 标准输出

显示器 /etc/stderr 2 标准错误输出

输出重定向(输入输出都是以当前环境为基准)

决定输入输出的文件位置

1、shell基础知识点

stdin 文件描述符为0
stdout 文件描述符为1
stderr 文件描述符为2

命令 > 文件 覆盖 (标准重定向)

命令 > 文件 追加 (追加重定向)

命令 2> 文件 覆盖的方式将命令的错误输出到文件

qwe 2> abc

命令 2>> 文件 追加的方式将命令的错误输出到文件

命令 &>文件 覆盖的方式吧正确输出和错误输出都保存到同一个文件中(重要)

ls &>> abc
sdf &>> abc

命令 &>>文件 追加的方式吧正确输出和错误输出都保存到同一个文件中

命令>>文件1 2>>文件2

把正确的输出追加到文件1中,把错误的输出追加到文件2中(重要)
ls >>ok 2>>err
qwer >>ok 2>>err

快速清空文件 >a.txt

出入重定向

cat <<final>> a.txt 将cat的东西输出,当在输入final时再追加到a.txt文件中(盯着final,以final为终止)

1、shell基础知识点

当输入到文件使用<<>>遇到final停止进程

echo 123 | passwd --stdin user1

wc

-l 统计行数
-L 统计最长那一行的长度
-c 统计字节数
-m 统计字符
-w 统计单词数

1、shell基础知识点

执行脚本的时候,需要往一个文件里自动输入N行内容。如果是少数的几行内容,还可以用echo追加方式,但如果是很多行,那么单纯用echo追加的方式就显得愚蠢之极了!
这个时候,就可以使用EOF结合cat命令进行行内容的追加了。

1、shell基础知识点

通配符

‘ ’

在单引号中所有特殊符号都没有特殊含义,所见即所得

“”

$(美元符号)、\(反斜杠)、’(单引号)、和”(双引号)依然可以保留其特殊功能

`` 反引号括起来的内容是系统命令

$() 和反引号作用一样,优先执行命令

a=$(ls) echo $a 相当于输出了ls

当出现$()中再次出现引用变量,通常用$()

() 和 {}

()

name=sc
(name=1m;echo $name)
输出结果为1m,输出后与上下两条命令再无关联会退出子shell
echo $name
输出结果为sc

{ ;}和不写差不多,不常用

有时候大括号可以起到区分作用

连着写整体会被识别为变量

1、shell基础知识点

方法一加空格

1、shell基础知识点

方法二大括号

1、shell基础知识点

[] 用于变量的测试

#注释

$调用变量值

\转义符

name=1

echo "\$name"

输出为$name,此时$的作用被视为普通字符

变量和运算符

bash中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型

变量名称可以由字母、数字和下划线组成,但是不能以数字开头

等号两侧不能有空格(命令格式所决定)

变量的值如果有空格,需要加双引号,没有空格的话加不加无所谓,$ ` \ 在双引号中都有其特殊含义,而单引号中的内容都是字符

变量的叠加:叠加时变量需要用双引号包含变量名

test=123

test="$test"456

echo $test

输出为123456

常用于增加变量

1、shell基础知识点

命令的结果赋予需要使用 `` 或$()

test=$(date)

echo $test

可以输出时间

变量分类(下一章详解)

其他语言有int char boolean型等等,而shell全是字符型

变量分类

用户自定义变量: 名称自定义 作用自定义 内容自定义

环境自变量(建议都写成大写,避免和命令冲突)

用户自定义环境自变量:名称自定义 作用自定义 内容自定义

系统自带环境变量: 命令确定 作用确定 内容自定义

位置参数变量

名称确定 作用确定 内容自定义

预定义变量

名称确定 作用确定 内容自定义

脚本数组和内置变量

数组

初始定义: 变量名=(值1 值2 值3)

例:array=(xiaoming xiaohong xiaogang)

单个加入array[4]=newstudent

1、shell基础知识点

1、shell基础知识点

删除单个角标

unset array[1],删除第二个

1、shell基础知识点

剩下的索引值不会改变

使用grep -w 查看是否有这个值

1、shell基础知识点

只要指定的内容,其他不输出方式

1、shell基础知识点

输出方法(大括号+中括号)

打印所有的值(可以写入循环)

1、shell基础知识点

1、shell基础知识点

打印单个值(角标形式)

1、shell基础知识点

求数组长度

1、shell基础知识点

输出数组最后一个值(赋值法)

1、shell基础知识点

eval

作用:,二次解释,用于调用最后一个参数

1、shell基础知识点

1、shell基础知识点

可以尝试依次输出,不行的话再用eval

例如有一个ls -l /root/a.txt,如果判断一下第三个位置参数/root/.txt不存在,就可以不执行

函数

作用:减少代码量,提高代码利用率,使脚本更加清晰可读

function 函数名(){}

1、shell基础知识点

可以不使用function,但是需要加括号,不建议

调用方式:直接调用行数名,先定义再调用

1、shell基础知识点

有参函数和无参函数

在调用时,需要传参数的叫做有参函数,不需要传参的函数叫做无参函数,有参函数用位置变量传参

有参数传递的过程

1、shell基础知识点

脚本里的位置参数和函数里的位置参数变量没关系

1

1、shell基础知识点

1、shell基础知识点

2

1、shell基础知识点

1、shell基础知识点

在脚本中默认情况下,脚本和函数是可以共用变量的,但是变量一定要在调用前定义

1、shell基础知识点

1、shell基础知识点

脚本中可以使用函数的变量,但是一定要先调用函数,才可以调用函数中的变量

局部变量local定义

1、shell基础知识点

1、shell基础知识点

如果函数中的变量使用local进行定义,此时改变量为函数的局部变量,脚本不可以调用

其他位置参数变量依然是各自传各自的

1、shell基础知识点

1、shell基础知识点

关于函数的返回值(return 返回状态码)

如果函数中有return,当函数遇到return,函数结束

当函数有return

1、shell基础知识点

1、shell基础知识点

如果函数中没有return,将行数中最后执行的最后一条命令的返回值作为函数的返回值

案例1

1、shell基础知识点

1、shell基础知识点

案例二

1、shell基础知识点

1、shell基础知识点

shell调试知识点

bash +选项

bash -n 将脚本读取一次,用于检测,不执行

1、shell基础知识点

bash -x 执行每一条命令和执行结果依次打印

1、shell基础知识点

参数-x会列出shell执行语句的顺序并将其打印。

bash -v 一边执行检测,一边打印

1、shell基础知识点

对脚本某个部分进行调试

1、shell基础知识点

其他

echo 打印变量

trap 调用

exit err 执行状态码非0 debug

bashdb 第三方调试工具

发布者:LJH,转发请注明出处:https://www.ljh.cool/35093.html

(0)
上一篇 2023年4月3日 下午1:03
下一篇 2023年4月5日 下午10:37

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注