Shell知识点回顾

2023-05-16

shell基本的语法:

定义变量:key=value   
注意:等号两边不能有空格,使用字母数字下划线命名,但是不能以数字开发头,系统变量建议全大写字母
撤销变量使用的是:unset命令
声明静态变量:readonly 变量   注意:不能unset
变量的值如果有空格,那么要加引号,默认是字符串,不能进行运算;
export将变量提升为全局变量

特殊变量:
$n : n是数字,$0表示该脚本的名称,$1~$9代表第一个到第九个参数,10以上的擦拭农户,需要用大括号包含,${10}
$# : 获取所有输入参数的个数,常用用循环
$* :  代表命令行中所有的参数,$*把所有的参数看成是一个整体
$@ :这个参数也是表示命令行中所有的参数,不过$@把每个参数区分对待
$? : 最后一次执行的命令的返回状态,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0,证明上一个命令执行不正确

运算符

1、$((运算式)) 或者 $[运算式]
2、expr +、-、\*、/、%   注意运算符两侧要有空格

条件判断:

[ condition ] 注意:condition前后要有空格,条件非空就是true

常用的判断条件:
1、两个整数之间的比较:= 字符串的比较   -lt 小于  -le 小于等于 -eq 等于 -gt 大于  -ge 大于等于  -ne 不等于
2、按照文件权限进行判断 -r 有读权限  -w 有写权限  -x 有可执行权限 
3、按照文件的类型进行判断 -f 文件存在并且是一个常规的文件(file)  -e 文件存在   -d 文件存在并且是一个目录
4、多条件判断 使用&& 表示前一条命令执行成功时,才执行后面一条命令,  ||表示上一条命令执行失败之后才执行下一条命令

流程控制:

1、if判断

if [ 条件判断式 ];then
    程序
if
或者
if [ 条件判断式 ]
    then
        程序
elif [ 条件判断式 ]
    then
        程序
else
    程序
fi

注意事项:中括号和条件判断式之间必须要有空格 if后要有空格

case 语法

case $变量名 in
    "值1")
        如果等于值1,则执行程序1
        
        ;;
    "值2")
        如果等于值1,则执行程序2
        
        ;;
    "值3")
        如果等于值1,则执行程序3
        
        ;;

    *)
        如果变量的值都不是以上的值,则执行此程序
        
        ;;
esac

注意:
case行尾必须为单词 in  每一种模式匹配必须以右括号 )结束。
双分号 ;; 表示命令序列结束,相当于java中的break
最后 *) 表示默认模式,相当于java中的default

for循环

for (( 初始值;循环控制条件;变量变化 ))
    do
        程序
    done
    
for 变量 in 值1  值2  值3 ....
    do
        程序
    done

比较$*与$@的区别:
1、$*和$@都表示传递函数或脚本的所有参数,不被双引号""包含时,都以$1$2...$n的形式输出所有参数
2、当被双引号""包含时,$*会将所有的参数作为一个整体,以"$1$2...$n"的形式输出所有的参数,$@怎会将各个参数分开表示

while循环

while [ 条件判断式 ]
    do    
        程序
    done

read读取控制台控制

read 选项 参数
选项:
-p :指定读取值时的提示符;
-t :指定读取值时等待的时间(秒)
参数:
变量 :指定读取值的变量名


函数:

系统函数:

basename基本语法
basename [string/pathname] [suffix]    注:basename命令会删掉所有的前缀包括最后一个("/")字符,然后将字符串显示出来
选项:suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

dirname 文件的绝对路径   注:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),返回路径(目录的部分)


自定义函数

[ function ] funname[()]
{
    Action;
    [return int;]
}

funname
注意:
函数必须先声明,后调用;
函数的返回值只能通过$?系统变量获取,可以显示的加return返回,如果不加将以最后一条命令运行的结果作为返回值

shell工具

cut命令

cut [选项参数]  filename
选项:
-f : 列号,提取第几列
-d : 分隔符,按照指定分隔符分割列
-c : 指定具体的字符

案例:

1、按照"-"切分列,并切割第一列
cut -d "-" -f 1 xxx.txt

2、按照"-"切分列,并且切割2,3列
cut -d "-" -f 2,3 xxx.txt

3、在文档中切割出guan
cat cut.txt | grep "guan" | cut -d "-" -f 1

4、选取系统PATH变量值,第2个":"开始后的所有路径:2-表示从第二个开始到后面的所有
echo $PATH | cut -d ":" -f 2-

5、切割ifconfig后打印的IP地址
ifconfig eth0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1


sed命令:

sed是一种流编辑器,一次处理一行内容。
处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间",接着sed命令处理缓冲区中的内容,
处理完成之后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容没有改变,
除非使用重定向存储输出。

sed [选项参数] 'command' filename
选项:
-e : 直接在指令列模式上进行sed的动作编辑
-i : 直接编辑文件

命令:
a : 新增,a的后面可以接字符串,在下一行出现。
d : 删除
s : 查找并替换

案例:

0、数据准备:
touch sed.txt
vim sed.txt
输入一下内容保存;
zhang san
li si
wang wu
xiao ming
hong hong
liang zai
la mei
xiao ying

1、将把 "da ge"这个字符串插入到sed.txt文件的第二行下,打印;
sed '2a da ge' sed.txt
注意:这时候文件内容并没有被改变

2、删除sed.txt文件所有包含xiao的行
sed '/xiao/d' sed.txt

3、将sed.txt文件中xiao替换成a
sed 's/xiao/a/g' sed.txt
注:这里的g表示全局,即:全部替换   global

4、将sed.txt文件中的第二行删除并将xiao替换为a
sed -e '2d' -e 's/xiao/a/g' sed.txt


awk命令:

一个强大的文本分析工具,把文件逐行读入,以空格为默认分隔符将每一行切片,切开的部分在进行分析处理

awk [选项参数] 'pattern1{action1} pattern2{action2}....' filename
parrern :表示AWK在数据中查找的内容,就是匹配模式
action :在找到匹配内容时所执行的一系列命令

选项参数:
-F :指定输入文件拆分隔符
-v :赋值一个用户定义的变量

案例:

0、数据准备:
cp /etc/passwd .

注意:只有匹配了pattern才会执行action

1、搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。
awk -F : '/^root/{print $7}'  passwd

2、搜索passwd文件以root关键字开头的所有行,并输出改行的第1列和第7列,中间用逗号分隔
awk -F : '/^root/{print $1,$7}'  passwd

3、只显示/etc/passwd的第一列和第七列,以逗号分割,并且在所有行前面(相当于输出的第一行)添加列名user,shell  在最后一行添加"laozhao,/bin/shuaige
awk -F : 'BEGIN{print "user,shell"}{print $1","$7} END{print "laozhao,/bin/shuaige"}' passwd
注:BEGIN表示在所有数据读取之前执行; END表示在所有数据执行之后执行

4、将passwd文件中的用户id增加数值1并输出
awk -v i=1 -F : '{print $3+i}' passwd

awk的内置变量:

FILENAME : 文件名
NR :已读的记录数
NF :浏览记录的域的个数(切割后,列的个数)

案例:

1、统计passwd文件名,每行的行号,每行的列数
awk -F : '{print "filename:" FILENAME ", lineNumber:" NF ",columns:" NF}' passwd

2、切割IP
ifconfig eth0 | grep "inet addr" | awk -F : '{print $2}' | awk -F " " '{print $1}' 

3、查询sed.txt中空行所在的行号
awk '/^$/{print NR}' sed.txt


sort命令:

在linux里面非常有用,它将文件进行排序,并将排序结果标准输出

sort (选项) (参数)

选项:
-n : 依照数值的大小排序;
-r :以相反的顺序来排序;
-t : 设置排序时所用的分隔字符
-k : 指定需要排序的列

参数:指定待排序的文件列表

案例:

0、数据准备 sort.txt
bb:40:5.4
bd:20:4.2
xz:50:2.3
cls:10:3.5
ss:30:1.6

按照":" 分割后的第三列倒序排列
sort -t : -nrk 3 sort.txt


企业面试题练习:

问题一:使用Linux命令查询file1中空行所在的行号
awk '/^$/{print NR}' file1

问题二:有文件chengji.txt内容如下:
张三 40
李四 30
王五 50
使用Linux命令计算第二列的和并输出

cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'

问题三:shell脚本里如何检查一个文件是否存在?如果不存在该如何处理?
#!/bin/bash
if [ -f file.txt ]; then
    echo "文件存在!"
else
    echo "文件不存在!"
fi

问题四:用shell写一个脚本,对文本中无序的一列数字排序,并求和放在最后一行
sort -t " " -nrk 2 test.txt | awk -F " " '{a+=$2;print $2} END{print "SUM=" a}'

问题五:请用shell脚本写出查找当前文件夹/home下所有的文本文件内容包含有字符"shen"的文件名
grep -r "shen" /home | cut -d ":" -f 1

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell知识点回顾 的相关文章

  • Win11笔记本连接热点(无线)后即自动断网怎么办?

    Win11笔记本连接热点 xff08 无线 xff09 后即自动断网怎么办 xff1f 有很多笔记本用户反应电脑PC连接到热点时 xff0c Windows电脑会自动断开与 Internet 的连接 xff0c 这是什么原因呢 xff1f
  • MyBatis Generator配置文件--指定生成实体类的属性名

    table标签下的设置属性useActualColumnNames用于指定生成实体类时是否使用实际的列名作为实体类的属性名 xff0c 取值true或false true xff1a MyBatis Generator会使用数据库中实际的字
  • MySQL 判断某个值是纯数字(正则判断)

    判断某个值是纯数字 这个sql 判断在字符串只有1个非数字的情况 判断不出来 span class token keyword select span span class token operator span span class to
  • mysql 取反操作

    span class token keyword update span span class token keyword table span span class token keyword set span filed span cl
  • error RC1015: cannot open include file ‘afxres.h‘. 的解决办法

    转载 参考 引用请注明出处 文章地址 xff1a https blog csdn net duiwangxiaomi article details 88822702 spm 61 1001 2014 3001 5501 编译工程时出现如下
  • 程序包com.sun.xml.internal.bind.v2不存在解决

    程序包com sun xml internal bind v2不存在 导入com sun xml internal 下的包并且没使用时打包也会报这个错误 全局搜索 com sun xml internal bind v2 删除掉import
  • fastjson byte[]转json字符串

    直接JSON toJSONString 会转为 base64字符串 可以使用JSON toJSON param toString 进行转换
  • SVN文件夹红色感叹号

    SVN文件夹红色感叹号 文件夹更新无最新文件 也没提交 解决方案 1右键 svn清理 2 提交 原因 有可能是svn上面有你之前提交的文件 而在你的本地目录里面删除了
  • jetson nano ubuntu 备份系统至u盘/移动硬盘

    jetson nano ubuntu备份系统至u盘 移动硬盘 1 df h 查看 信息2 挂载u盘2 1 fat322 2 ntfs2 3 挂载被占用 3 刷系统4 解除挂载 1 df h 查看 信息 一般都是 dev sda dev sd
  • 安装 cuda 从装系统开始

    勾选这个选项后就可以跳过安装驱动的环节了 设置root密码 sudo passwd root 安装openssh server 开xshell sudo apt get update sudo apt get install openssh
  • mac用完移动硬盘后 windows识别不出 解决方案

    cmd 运行 chkdsk F f
  • Cannot find reference ‘imread‘ in ‘__init__.py‘

    Cannot find reference imread in init py 前言 本人java开发 只是用python解决部分问题 可能解决方案不专业或者有问题 请自己判断 毕竟我只是简单处理下图片 解决方案 方案一 pip insta
  • RobotMaster资料汇总

    1 软件 xff1a 软件可以去网上下载 xff0c 或者去淘宝购买 xff0c 还包安装 不过基本上都是在虚拟机上操作 xff0c 只有在XP系统下可以直接安装 若是正版软件 xff0c 则会包含正确的安装教程 其中包括 xff1a MA
  • 代码改变生活-使用You-Get下载bilibili的视频【三】

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 112167893 我自己都想不到 xff0c 这个分享做到了第三篇 xff0c
  • Python脚本之ZIP文件压缩、解压

    本文为博主原创 xff0c 未经许可严禁转载 本文链接 xff1a https blog csdn net zyooooxie article details 114632112 最近在翻看Python的官方文档 xff0c https d
  • 对文本和数据进行处理之awk编程

    转载地址 xff1a 点击打开链接 awk 是一种编程语言 xff0c 用于在Linux unix下对文本和数据进行处理 数据可以来自标准输入 stdin 一个或多个文件 xff0c 或其它命令的输出 它支持用户自定义函数和动态正则表达式等
  • Ubuntu20.04在vsCode配置opencv

    一 下载opencv xff1a https opencv org releases 我下载的为opencv4 5 4版本 xff0c 可以直接下载 zip文件 xff0c 可以选择其他版本 Sources版本即为 zip版本 xff1a
  • UISearchController使用中的几个坑和一个知识点

    坑1 点击搜索框后 xff0c 搜索框上移到屏幕之外了 不多说了 xff0c 都是坑 因为我之前设置了 UINavigationBar appearance 61 false 把这个去掉好了 坑2 搜索时搜索框和UITableview中间有
  • 深度学习环境搭建(四)之 CUDNN安装

    安装完CUDA Driver和CUDA后 xff0c 还需要安装CUDNN xff0c NVIDIA用于深度学习GPU加速的库 1 下载CUDNN 访问官网链接 xff0c 根据CUDA版本和Ubuntu版本选择CUDNN的版本 前面使用的
  • NMAP 六种端口状态解读

    NMAP 简介 nmap 是一款功能非常强大的扫描工具 xff0c 不仅能对端口扫描 xff0c 还可以在扫描中指定自定义的标志位 xff0c 对自己的 IP 地址进行隐藏伪装为别的 IP 地址 xff0c 还可以根据 nmap 数据库 x

随机推荐

  • IP ID idle 扫描

    IP ID idle 扫描简单介绍 在1998年的时候 xff0c 一个名叫 Antirez 的工程师 xff0c 发现了这种扫描技术 xff0c 攻击者可以通过不直接向目标主机发送报文的形式 xff0c 进行端口扫描 xff0c 而是通过
  • CentOS下编译Linux内核

    前言 编译内核是一项很简单的事情 xff0c 但却是进入Linux内核世界的第一步 xff0c 想要开发内核代码 xff0c 想要了解内核的运行机制 xff0c 第一步就是编译Linux内核 xff0c 以下是在centos7 5环境下编译
  • CentOS下快速升级gcc版本

    前言 很多时候由于gcc版本过低问题 xff0c 导致我们举步维艰 xff0c 从gcc官网下载源码编译又比较费时费力 xff0c 今天我就给大家分享一个快速升级gcc的方法 升级到gcc 6 3 xff1a devtoolset 6已经结
  • Linux带宽测试

    iperf是linux下一款非常实用的测带宽工具 xff0c 是C S模型的 xff0c 支持使用TCP和UDP测试 xff0c 可以测试带宽 xff0c 丢包 xff08 丢包指的是UDP的丢包 xff0c TCP丢包会重传 xff09
  • initramfs详解-----初识initramfs

    为什么需要initramfs 在Linux内核被加载到内存并运行后 xff0c 内核进程最终需要切换到用户太的进程来使用计算机 xff0c 而用户进程又存在于外存储设备上 xff0c 比如systemd进程 xff0c 通常systemd进
  • 抓包展示vlan报文(8021Q)

    VLAN数据帧格式 要使交换机能够分辨不同VLAN的报文 xff0c 需要在报文中添加标识VLAN信息的字段 IEEE 802 1Q协议规定 xff0c 在以太网数据帧的目的MAC地址和源MAC地址字段之后 协议类型字段之前加入4个字节的V
  • KVM NAT 模型

    目录 NAT原理 virbr0与virbr0 nic virbr0 nic作用 关于kvm中的网桥和virbr0 nic网卡需注意以下几点 xff1a NAT原理 virbr0与virbr0 nic zyq 64 zyq ip a 6 vi
  • Linux查看实时网卡流量的几种方式

    工作中 xff0c 我们经常需要查看服务器的实时网卡流量 通常 xff0c 我们会通过这几种方式查看Linux服务器的实时网卡流量 1 sar n DEV 1 2 sar命令包含在sysstat工具包中 xff0c 提供系统的众多统计数据
  • NUMA详解

    目录 NUMA简介 NUMA开启与关闭 查看系统是否支持 关闭方法 numactl hardware介绍 没有安装numactl工具下查看NUMA架构节点数 xff1a 查看每个NUMA节点的CPU使用情况 xff1a 看每个NUMA节点的
  • OpenStack中的CPU与内存超分详解

    目录 什么是超分 CPU超分 查看虚拟机虚拟CPU运行在哪些物理CPU上 内存超分 内存预留 内存共享 如何设置内存预留和内存共享 全局设置 临时设置 什么是超分 超分通常指的是CPU或者GPU的分区或者分割 xff0c 以在一个物理CPU
  • docker 官方的镜像大多基于debian,但是官方源apt-get update更新失败,如何更换成中国源

    一开始创建容器的时候就应该更换成国内数据源 xff0c 可是我的镜像源在经历重启后 xff0c 回归到官方镜像源 xff0c 当想安装别的linux命令时 xff0c 异常缓慢 xff0c 安装不上 这种情况就是镜像源导致 镜像源可以在容器
  • MySQL学习笔记(11)——创建视图

    11 视图 11 1 创建视图 创建视图的语法 创建视图使用CREATE VIEW语句 xff0c 基本语法格式如下 xff1a span class token keyword create span span class token p
  • Java 实现天气预报

    效果图 1 登录高德地图API开放平台 天气查询 API文档 开发指南 Web服务 API 高德地图API 2 用户在高德地图官网申请web服务API类型KEY 3 天气查询 天气查询API服务地址 xff1a URL https rest
  • 数学建模学习(1)———— 逻辑回归的使用和案例(2022.7.18)

    许多数学建模的使用基本都是一元线性回归 xff0c 和多元线性回归开始 xff0c 但由于经常看关于这两个东西 xff0c 实在不想从这开始整理笔记 xff0c 等后面印象不深后在整理过 文章目录 目录 文章目录 一 逻辑回归介绍 二 逻辑
  • Windows下python和pip的环境配置 ---转载

    本文转载于 xff1a http www cnblogs com yuanzm p 4089856 html 非常感谢原文作者的博文 xff0c 帮助了我学习的不少困惑 这篇文章作为学习使用Python的第一篇文章 xff0c 如何安装Py
  • GreenHills的使用及常用技巧

    GreenHills作为世界知名第三方调试工具支持市面上几乎所有芯片 V850调试工具有多种选择 当时项目使用Greenhills作为编译调试工具让我见识到了专业工具的强大 本文以KPIT AutoSAR的PORT模块为例介绍GreenHi
  • LaTeX 中处理参考文献的三种方法总结

    LaTeX 中处理参考文献的三种方法总结 方法一 xff1a 用BibLaTeX处理 分成如下四步 xff1a 第一步 xff1a 制作生成bib文件 xff1b 第二步 xff1a 在导言区需要加入biblatex宏包 xff1a use
  • mysql8之SSL加密

    新发现 xff1a 安装Mysql8后 xff0c 查看datadir 文件多了不少 xff0c 发现都是SSL加密对应得文件 pem pwd ls l pem data mysqldata rw 1 mysql mysql 1676 3月
  • mysql常用算法积累

    1 mysql计算百分比 使用sum函数 xff0c 如下 xff1a SELECT COUNT AS 总数 SUM CASE WHEN 96 匹配情况 96 61 1 THEN 1 ELSE 0 END AS 总匹配数 SUM CASE
  • Shell知识点回顾

    shell基本的语法 xff1a 定义变量 xff1a key 61 value 注意 xff1a 等号两边不能有空格 xff0c 使用字母数字下划线命名 xff0c 但是不能以数字开发头 xff0c 系统变量建议全大写字母 撤销变量使用的