Linux脚本语言学习--上

1.shell概述

1.1 shell是什么?

Shell是一个命令行解释器,他为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以使用Shell来启动,挂起,停止甚至是编写一些程序。

Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。

1.2.Shell的分类

**Bourne Shell:**从1979年起Unix就开始使用,他的主文件名为sh。

**C Shell:**他主要在BSD版本的unix系统中使用,其语法和C语言相似。

Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh,ksh,Bash,psh,zsh;C家族主要包括:csh,tcsh。

Bash:Bash和sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

1.3.Linux支持的Shell

# 查看shell的文件
/etc/shellsroot@:~# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/usr/bin/sh
/bin/dash
/usr/bin/dash

2.shell脚本的执行方式

2.1.echo输出命令

echo [选项] [输出内容]
-e :支持反斜线控制字符转换
eg:
root@:~# echo 'hello world!'
hello world!

# 删除左侧字符
root@:~# echo -e "ab\\bc"
ac
# 制表符与换行符
root@:~# echo -e "a\\tb\\tc\\nd\\te\\tf"
a       b       c
d       e       f
# 按照十六进制ascll码输出
root@:~# echo -e "\\x61\\t\\x62\\t\\x63\\t\\x65\\t\\x66"
a       b       c       e       f
root@:~# echo -e "\\x61\\t\\x62\\t\\x63\\n\\x65\\t\\x66\\t\\x67"
a       b       c
e       f       g
# 颜色输出
root@:~# echo -e "\\e[1;31m abcd \\e[0m"abcd
\\e[1 :开启颜色输出
\\e[0m:关闭颜色输出
# 支持的颜色
#30m=黑色,31m=红色,32m=绿色,33m=黄色
#34m=蓝色,35m=洋红,36m=青色,37m=白色

2.2.第一个脚本

#!/bin/bash       #标注我写的是shell脚本
#This is program
#Author:db (E-mail:xxxx@qq.com)echo -e 'hello world!!'# 记得chmod 755 hello.sh 加上可运行权限
root@:~/sh# ./hello.sh
hello world!!# 也可以通过绝对路径来执行脚本文件
root@:~/sh# /root/sh/hello.sh
hello world!!

2.3.脚本执行

赋予执行权限,直接运行

  • chmod 755 hello.sh
  • ./hello.sh

通过bash调用执行脚本

  • bash hello.sh

root@:~/sh# bash hello.sh hello world!!

注意如果在Windows系统中编写shell脚本的话会出现字符错误,Windows的回车键与Linux的回车不相同

root@:~/sh# ./hellodos.sh
-bash: ./hellodos.sh: /bin/bash^M: bad interpreter: No such file or directory
root@:~/sh# cat -A hellodos.sh
#!/bin/bash^M$
#The first program^M$
#Author:db (E-mail:xxxx@qq.com)^M$
^M$
echo -e 'hello world!!'
root@:~/sh# cat -A hello.sh
#!/bin/bash$
#The first program$
#Author:db (E-mail:xxxx@qq.com)$
$
echo -e 'hello world!!'$Windows中的回车是^M$符号
Linux中的是$
如何解决呢?
root@:~/sh# dos2unix hellodos.sh
dos2unix: converting file hellodos.sh to Unix format...
root@:~/sh# ./hellodos.sh
hello world!!
使用dos2unix 将格式进行转换

3.Bash的基本功能

3.1.历史命令与命令补全

# 历史命令
history [选项] [历史命令保存文件]
选项:
-c:清空历史命令  # 建议不要情况
-w:把缓存的历史命令写入历史命令保存文件 (~/*bash_history)
默认保存1000条,想要更改的话需要修改配置文件/etc/profile
# 注意Ubuntu的就在~/.bashrc 文件内就可以直接修改

3.1.1.历史命令的调用

  • 使用上,下箭头调用以前的历史命令
  • 使用“!n”重复执行第n条历史命令
  • 使用“!!”重复执行上一条命令
  • 使用”!字串” 重复执行最后一条以该字串开头的命令
  392  ls393  ./hellodos.sh394  cat -A hellodos.sh395  cat -A hello.sh396  dos2unix hellodos.sh397  ./hellodos.sh398  cd ..399  clear400  history401  vim /etc/profile402  vim ~/.bashrc403  history404  clear405  history
root@:~# !392
ls
qemu-aarch64-static  sh  snap
root@:~# !!
ls
qemu-aarch64-static  sh  snaproot@:~# !l
ls
qemu-aarch64-static  sh  snap
root@:~#

3.1.2.命令与文件补全

在bash中,命令与文件补全是非常方便与常用的功能,我们只要输入命令或文件时,按“Tab”键就会自动进行补全

3.2.命令别名与常用快捷键

3.2.1.别名

# 命令别名
alias 别名='原命令'

命令执行时顺序

  1. 第一顺位执行用绝对路径或者相对路径执行的命令
  2. 第二顺位执行别名
  3. 第三顺位执行bash的内部命令
  4. 第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令

别名永久生效

修改 .bashrc文件,将别名写入这个文件中

删除别名

unalias 别名

3.2.2.bash常用快捷键

3.3.输入输出重定向

3.3.1.标准输入输出

设备设备文件名文件描述符类型
键盘/dev/stdin0标准输入
显示器/dev/stout1标准输出
显示器/dev/sdterr2标准错误输出

3.3.2.输出重定向

# 示例
root@:~# ls -l > ls.txt
root@:~# cat ls.txt
total 380
-rw-r--r-- 1 root root      0 Dec 18 14:49 ls.txt
-rw-r--r-- 1 root root 376832 Dec  5 17:01 qemu-aarch64-static
drwxr-xr-x 2 root root   4096 Dec 18 11:25 sh
drwx------ 5 root root   4096 Oct 18 15:39 snap
# 想要将错误命令的提示保存下来需要在 >> 加上2,2>>,2>
# 把命令的结果通过输出重定向保存下来,管理员进行查看就可以知道命令运行是否有错误了
这样不太智能,所以有了下面能同时将正确和错误的命令都输出的命令。

root@:~# ls -l >> ls2.txt 2>> lserorr.txt
root@:~# ls
ls.txt  ls2.txt  lserorr.txt  qemu-aarch64-static  sh  snap
root@:~# cat lserorr.txt
root@:~# cat ls2.txt
total 384
-rw-r--r-- 1 root root    362 Dec 18 15:38 ls.txt
-rw-r--r-- 1 root root      0 Dec 18 15:49 ls2.txt
-rw-r--r-- 1 root root      0 Dec 18 15:49 lserorr.txt
-rw-r--r-- 1 root root 376832 Dec  5 17:01 qemu-aarch64-static
drwxr-xr-x 2 root root   4096 Dec 18 11:25 sh
drwx------ 5 root root   4096 Oct 18 15:39 snap
root@:~# lss -l >> ls2.txt 2>> lserorr.txt
root@:~# cat lserorr.txt
Command 'lss' not found, but there are 15 similar ones.

3.3.3.输入重定向

#示例:
wc [选项] [文件名]
#选项:
-c     统计字节数
-w     统计单词数
-l     统计行数
root@mfedang-virtual-machine:~# wc < ls.txt8  63 362
root@mfedang-virtual-machine:~# wc << h
> sad
> sadas
> asdsaf
> h3       3      17
输入重定向使用很少,详细资料需要上网查询,这里只是一个示例

3.4.多命令顺序执行与管道符

3.4.1.多命令顺序执行

root@:~# ls;pwd
ls.txt  ls2.txt  lserorr.txt  qemu-aarch64-static  sh  snap
/root
root@:~# lsd;pwd
Command 'lsd' not found, but can be installed with:
snap install lsd
/root
root@:~# lsd&&pwd
Command 'lsd' not found, but can be installed with:
snap install lsd
root@:~# lsd||pwd
Command 'lsd' not found, but can be installed with:
snap install lsd
/root
# 可以查看当前系统创建一个100M的文件需要多久时间
root@:~# date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date
Wed Dec 18 16:27:49 CST 2024
100000+0 records in
100000+0 records out
102400000 bytes (102 MB, 98 MiB) copied, 0.827522 s, 124 MB/s
Wed Dec 18 16:27:50 CST 2024
## 可以判断上一个命令是否被成功执行
root@:~# lsd && echo yes || echo no
Command 'lsd' not found, but can be installed with:
snap install lsd
no

3.4.2.管道符

格式:命令1 | 命令2

命令1的正确输出作为命令2的操作对象

ll /etc | more        #ll /etc的输出内容,作为more的操作对象# 示例
grep [选项] "搜索内容" 文件名
选项:
-i:忽略大小写
-n:输出行号
-v:反向查找
--color=auto 搜索出的关键字用颜色显示 **root@:~# grep -i -n "gs" /etc/wifibroadcast.cfg
7:[gs_mavlink]
11:[gs_video]
13:                                   # video sink (QGroundControl on GS)
root@:~# grep -i -n --color"gs" /etc/wifibroadcast.cfg
--color
root@:~# grep -i -n --color"gs" /etc/wifibroadcast.cfg
--color
root@:~# grep -i -n --color "gs" /etc/wifibroadcast.cfg
7:[gs_mavlink]
11:[gs_video]
13:                                   # video sink (QGroundControl on GS)
root@:~# grep -i -n --color=auto "gs" /etc/wifibroadcast.cfg
7:[gs_mavlink]
11:[gs_video]
13:                                   # video sink (QGroundControl on GS)**

3.5通配符与其他特殊符号

3.5.1.通配符

3.5.2.bash中其他特殊符号

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

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

相关文章

活动预告|云原生创新论坛:知乎携手 AutoMQ、OceanBase、快猫星云的实践分享

近年来&#xff0c;云原生技术迅猛发展&#xff0c;成为企业数字化转型的关键动力&#xff0c;云原生不仅极大地提升了系统的灵活性和可扩展性&#xff0c;还为企业带来了前所未有的创新机遇。 12 月 28 日 知乎携手 AutoMQ、OceanBase 和快猫星云推出“云原生创新论坛”主题的…

XXE靶场

XXE-lab 靶场 靶场网址&#xff1a;http://172.16.0.87/ 第一步我们看到网站有登录框我们试着用 bp 去抓一下包 将抓到的包发到重放器中 然后我们构建palody <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "php://filter/readconvert.base64-encode/resourceC:/flag/fla…

djiango DRF的使用

djiango DRF的使用 一 、初始 DRF序列化环境安装环境配置数据模型定义定义DRF序列化模型对象 二 、DRF请求和响应请求对象&#xff08;Request objects&#xff09;响应对象&#xff08;Response objects&#xff09;状态码&#xff08;Status codes&#xff09;包装&#xff0…

【BUG】记一次context canceled的报错

文章目录 案例分析gorm源码解读gin context 生命周期context什么时候cancel的什么时候context会被动cancel掉呢&#xff1f; 野生协程如何处理 案例分析 报错信息 {"L":"ERROR","T":"2024-12-17T11:11:33.0050800","file"…

Qt WORD/PDF(四)使用 QAxObject 对 Word 替换(QWidget)

关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: Qt WORD/PDF&#xff08;一&#xff09;使用 QtPdfium库实现 PDF 操作 Qt WORD/PDF&#xff08;二…

使用nvm对node进行多版本管理

1.nvm下载及安装 下载链接 下载完成后&#xff0c;对文件进行解压安装&#xff0c;按照提示一步步安装&#xff0c;如果电脑上之前有安装过node&#xff0c;需要先卸载&#xff0c;再进行安装。 按照提示完成安装。 2.设置环境变量 可以现在C:\Users\name\AppData\Roamin…

基于Socket实现客户端和服务端的Tcp通信(C#)

0.前言 使用C#和Unity实现复刻Liar’s bar中的功能 软件开发大作业 本系列文章用于记录与分享开发过程中使用到的知识点&#xff0c;以及常见错误 本文主要描述有关网络编程的内容 目录 0.前言1.使用Socket搭建Server1.1Server端的Socket连接1.2 Server端接收Client的信息1.3…

eclipse 如何设置项目、不同类型文件的 utf8 编码

编码问题一直是软件开发中让人头疼的小细节&#xff0c;尤其是团队协作中&#xff0c;若编码格式不统一&#xff0c;乱码问题便会频繁出现。那么如何在 Eclipse 中统一设置项目和文件的 UTF-8 编码&#xff0c;避免因编码问题造成不必要的困扰呢&#xff1f;今天&#xff0c;我…

MVC基础——市场管理系统(四)

文章目录 项目地址六、EF CORE6.1 配置ef core环境6.2 code first6.2.1 创建Database context1. 添加navigation property2. 添加MarketContext上下文七、Authentication7.1 添加Identity7.2 Run DB migration for Identity7.3 使用Identity7.3.1 设置认证中间件7.3.2 设置权限…

java后端环境配置

因为现在升学了&#xff0c;以前本来想毕业干java的&#xff0c;很多java的环境配置早就忘掉了&#xff08;比如mysql maven jdk idea&#xff09;&#xff0c;想写个博客记录下来&#xff0c;以后方便自己快速搭建环境 JAVA后端开发配置 环境配置jdkideamavenMySQLnavicate17…

Edge Scdn用起来怎么样?

Edge Scdn&#xff1a;提升网站安全与性能的最佳选择 在当今互联网高速发展的时代&#xff0c;各种网络攻击层出不穷&#xff0c;特别是针对网站的DDoS攻击威胁&#xff0c;几乎每个行业都可能成为目标。为了确保网站的安全性与稳定性&#xff0c;越来越多的企业开始关注Edge …

CN-fnst::CTF Web

文章目录 ezphpez_pythoncomment_mefilechecker_revengei_am_eeeeeshili ezphp 直接数组绕过, 执行命令 GET: usn[]1&usn1[]1&signenv POST: pwd[]2&pwd1[]2 ez_python file参数任意文件读取 读取源码: ?fileapp.py from flask import Flask, request, render_…

AI自我进化的新篇章:谷歌DeepMind推出苏格拉底式学习,语言游戏解锁无限潜能

各位AI爱好者、技术研究者&#xff0c;大家好&#xff01;今天我们来聊聊一个令人兴奋的AI研究新进展——谷歌DeepMind推出的“苏格拉底式学习”方法。这项研究的独特之处在于&#xff0c;它让AI在没有外部数据的情况下&#xff0c;通过“语言游戏”实现自我进化&#xff0c;这…

《类和对象:基础原理全解析(上篇)》

目录 一、浅谈面向过程和面向对象二、C 中的结构体&#xff08;struct&#xff09;1. C 中 struct 的使用 三、C 中的类&#xff08;class&#xff09;四、类的封装性1. 类成员的权限控制关键字2. 权限控制关键字的使用 五、类的六大默认成员函数介绍六、构造函数1. 使用构造函…

电子应用设计方案-59:智能电动床系统方案设计

智能电动床系统方案设计 一、引言 智能电动床作为一种高端家居产品&#xff0c;旨在为用户提供更加舒适、便捷和个性化的睡眠体验。本方案将详细介绍智能电动床系统的设计架构、功能特点和技术实现。 二、系统概述 1. 系统目标 - 实现床体的多部位电动调节&#xff0c;满足不…

电商环境下的财务ERP系统架构

先介绍一下自己的工作经历&#xff0c;2002年开始进入ERP实施行业&#xff0c;专注于O记EBS系统&#xff0c;正好赶上中国经济和信息化高度发展的阶段&#xff0c;先后实施过很多大国企和民企的大型ERP项目&#xff0c;在实施过程中逐渐对ERP系统的架构、模块设计有更深入的认识…

【WRF教程第3.2期】预处理系统 WPS详解:以4.5版本为例

预处理系统 WPS 详解&#xff1a;以4.5版本为例 WPS 嵌套域&#xff08;WPS Nested Domains&#xff09;USGS 和 MODIS 土地利用重力波拖拽方案静态数据&#xff08;Gravity Wave Drag Scheme Static Data&#xff09;1. 什么是重力波拖拽方案&#xff08;GWDO&#xff09;静态…

在Proteus软件仿真STM32F103寄存器方式PID调速电机

因为电脑中只装了IAR&#xff0c;所以本次编译环境就只能是IAR&#xff0c;所用软件版本是9.32.1。 本次仿真为&#xff0c;纯手写代码&#xff0c;不用任何库&#xff0c;包括启动文件也是手写。 首先是启动文件&#xff0c;该文件是汇编文件&#xff0c;命名为start.s&…

QtitanChart组件——高效、灵活的Qt数据可视化解决方案

在现代应用开发中&#xff0c;数据可视化已经成为不可或缺的一部分。无论是商业分析工具、财务报表、工程图表&#xff0c;还是科学实验数据展示&#xff0c;如何以直观、易理解的方式展示数据&#xff0c;往往决定了软件的可用性与用户体验。对于Qt开发者来说&#xff0c;Qtit…

YOLOv11融合[CVPR2024]Starnet中的star block特征提取模块

YOLOv11v10v8使用教程&#xff1a; YOLOv11入门到入土使用教程 YOLOv11改进汇总贴&#xff1a;YOLOv11及自研模型更新汇总 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewri…