Linux脚本语言学习--上

news2024/12/19 16:31:58

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/shells

root@:~# 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  ls
  393  ./hellodos.sh
  394  cat -A hellodos.sh
  395  cat -A hello.sh
  396  dos2unix hellodos.sh
  397  ./hellodos.sh
  398  cd ..
  399  clear
  400  history
  401  vim /etc/profile
  402  vim ~/.bashrc
  403  history
  404  clear
  405  history
root@:~# !392
ls
qemu-aarch64-static  sh  snap
root@:~# !!
ls
qemu-aarch64-static  sh  snap

root@:~# !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.txt
  8  63 362
root@mfedang-virtual-machine:~# wc << h
> sad
> sadas
> asdsaf
> h
      3       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.coloradmin.cn/o/2262261.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年底-Sre面试问题总结-持续更新

这几个缩写 贴一下是因为真的会有人问:( SRE “Site Reliability Engineer” 站点可靠性工程师 SLA “Service Level Agreement” 服务可用性协议 CICD “Continuos Integration Continous Deployment” 持续集成 持续部署 3个高频问题 K8s生产环境中处理过哪些复杂 or 印象…

【硬件接口】I2C总线接口

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 I2C总线是一种非常常用的总线&#xff0c;其多用于一个主机&#xff08;或多个&#xff09;与单个或多个从设备通讯…

OkHttp源码分析:分发器任务调配,拦截器责任链设计,连接池socket复用

目录 一&#xff0c;分发器和拦截器 二&#xff0c;分发器处理异步请求 1.分发器处理入口 2.分发器工作流程 3.分发器中的线程池设计 三&#xff0c;分发器处理同步请求 四&#xff0c;拦截器处理请求 1.责任链设计模式 2.拦截器工作原理 3.OkHttp五大拦截器 一&#…

SAP:如何修改已释放的请求

SAP:如何修改已释放的请求 QQ出了一个新功能&#xff0c;把10年前的旧日志推给自己。这个10年前的日志&#xff0c;是用户反映在SE10中把请求释放后发现漏了内容&#xff0c;想修改已释放的请求。经调查写了一个小程序&#xff0c;实现用户的需求。 *&-------------------…

python怎么循环嵌套

嵌套循环&#xff1a; 概念&#xff1a;循环中再定义循环&#xff0c;称为嵌套循环&#xff1b; 【注意】嵌套循环可能有多层&#xff0c;但是一般我们实际开发最多两层就可以搞定了(99%的情况) 格式&#xff1a; 1、while中套while常用 2、while中套for in 3、for in中套…

前端优雅(装逼)写法(updating····)

1.>>右位移运算符取整数 它将一个数字的二进制位向右移动指定的位数&#xff0c;并在左侧填充符号位&#xff08;即负数用1填充&#xff0c;正数用0填充&#xff09;。 比如 2.99934 >> 0&#xff1a;取整结果是2&#xff0c;此处取整并非四舍五入 2.99934 会先…

MySQL -- 库的相关操作

目录 查看数据库 创建数据库 直接创建&#xff1a; 加约束条件 if not exists 字符集和校对规则 什么是字符集 什么是校对规则 校对规则的主要功能 校对规则的特性 查看指定的数据库使用的字符集和校对规则&#xff1a; 比较是否区分大小写字母差异 显示创建语句 …

Moretl开箱即用日志采集

永久免费: 至Gitee下载 使用教程: Moretl使用说明 使用咨询: 用途 定时全量或增量采集工控机,电脑文件或日志. 优势 开箱即用: 解压直接运行.不需额外下载.管理设备: 后台统一管理客户端.无人值守: 客户端自启动,自更新.稳定安全: 架构简单,兼容性好,通过授权控制访问. 架…

分享一次接口性能摸底测试过程

接口性能测试是用于验证应用程序中的接口是否可以满足系统的性能要求的一种测试方法。确定应用程序在各种负载条件下的性能指标&#xff0c;例如响应时间、吞吐量、并发性能等&#xff0c;以便提高系统的性能和可靠性。本文主要讲述接口性能测试从前期准备、方案设计到环境搭建…

【机器学习】机器学习的基本分类-无监督学习-t-SNE(t-分布随机邻域嵌入)

t-SNE&#xff08;t-分布随机邻域嵌入&#xff09; t-SNE&#xff08;t-distributed Stochastic Neighbor Embedding&#xff09;是一种用于降维的非线性技术&#xff0c;常用于高维数据的可视化。它特别适合展示高维数据在二维或三维空间中的分布结构&#xff0c;同时能够很好…

【教学类-83-03】20241218立体书盘旋蛇3.0——圆点蛇1(蚊香形)

背景需求&#xff1a; 制作儿童简易立体书贺卡 【教学类-83-01】20241215立体书三角嘴1.0——小鸡&#xff08;正菱形嘴&#xff09;-CSDN博客文章浏览阅读1k次&#xff0c;点赞24次&#xff0c;收藏18次。【教学类-83-01】20241215立体书三角嘴1.0——小鸡&#xff08;正菱形…

监控视频汇聚融合云平台一站式解决视频资源管理痛点

随着5G技术的广泛应用&#xff0c;各领域都在通信技术加持下通过海量终端设备收集了大量视频、图像等物联网数据&#xff0c;并通过人工智能、大数据、视频监控等技术方式来让我们的世界更安全、更高效。然而&#xff0c;随着数字化建设和生产经营管理活动的长期开展&#xff0…

JAVA 零拷贝技术和主流中间件零拷贝技术应用

目录 介绍Java代码里面有哪些零拷贝技术java 中文件读写方式主要分为什么是FileChannelmmap实现sendfile实现 文件IO实战需求代码编写实战IOTest.java 文件上传阿里云&#xff0c;测试运行代码看耗时为啥带buffer的IO比普通IO性能高&#xff1f;BufferedInputStream为啥性能高点…

云灾备技术

目录 云灾备分类与定义 云容灾定义与主要应用场景 云容灾定义 应用场景 云备份定义与主要应用场景 云备份定义 应用场景 云容灾参考模型与关键技术 云备份参考模型与关键技术 云灾备分类与定义 云容灾技术是指保护云数据中心业务持续性的灾备技术&#xff0c;它是云灾…

进程通信方式---共享映射区(无血缘关系用的)

5.共享映射区&#xff08;无血缘关系用的&#xff09; 文章目录 5.共享映射区&#xff08;无血缘关系用的&#xff09;1.概述2.mmap&&munmap函数3.mmap注意事项4.mmap实现进程通信父子进程练习 无血缘关系 5.mmap匿名映射区 1.概述 原理&#xff1a;共享映射区是将文件…

leetcode 面试经典 150 题:长度最小的子数组

链接长度最小的子数组题序号209题型数组解题方法滑动窗口难度中等 题目 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, …, numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件…

代码随想录day22 | 回溯算法理论基础 leetcode 77.组合 77.组合 加剪枝操作 216.组合总和III 17.电话号码的字母组合

DAY22 回溯算法开始 学到目前最烧脑的一天 回溯算法理论基础 任何回溯算法都可以抽象成一个树结构 理论基础 什么是回溯法 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。 在二叉树系列中&#xff0c;我们已经不止一次&#xff0c;提到了回溯 回溯是递归的副…

画一颗随机数

代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>codePen - Random Tree</title> </head> <body><canvas></canvas><script>const canvas doc…

牛客周赛 Round 72 题解

本次牛客最后一个线段树之前我也没碰到过&#xff0c;等后续复习到线段树再把那个题当例题发出来 小红的01串&#xff08;一&#xff09; 思路&#xff1a;正常模拟&#xff0c;从前往后遍历一遍去统计即可 #include<bits/stdc.h> using namespace std; #define int lo…

[x86 ubuntu22.04]投影模式选择“只使用外部”,外部edp屏幕无背光

1 问题描述 CPU&#xff1a;G6900E OS&#xff1a;ubuntu22.04 Kernel&#xff1a;6.8.0-49-generic 系统下有两个一样的 edp 屏幕&#xff0c;投影模式选择“只使用外部”&#xff0c;内部 edp 屏幕灭&#xff0c;外部 edp 屏幕无背光。DP-1 是外部 edp 屏幕&#xff0c;eDP-1…