Shell Script

Shell Script

赋值操作

foo=bar
echo $foo

注意: 不要使用空格分开

shell 将会把foo当作一个程序

转义

Bash通过使用''""来定义字符串

""会将字符串中的变量转义

echo "String is $foo"

''会将字符串中的变量原样输出

echo 'String is $foo'

函数

函数内容:创建一个目录并进入目录的脚本mcd.sh

mcd(){mkdir -p "$1"cd "$1"
}

$1等特殊字符参考表

Bash中读取并执行文件中的命令

source mcd.sh

调用mcd函数,创建一个test目录

mcd test

返回码

  • 0:程序成功执行
  • 0:程序有错误

使用$?来查看上条命令返回码

ls #成功执行cd ooo #假设当前目录下没有ooo这个目录,则有错误发生

true程序返回值始终都是0
false程序返回值始终都是1

逻辑运算符

  • &&:与运算
  • ||:或运算

示例:

ture || echo "OR" # ture的返回值是0,所以不会再执行echo
false || echo "OR" # false的返回值是1,将会继续执行echoture && echo "AND" # ture的返回值是0,echo的返回值也是1,所以都会执行
false && echo "AND" # false的返回值是1,echo的返回值是1,将不会执行echo

命令替换

$(CMD)当执行时,shell首先会执行CMD然后使用CMD的结果去替换$(CMD)

示例:

#!/bin/sh 
for i in $(ls); 
do echo $i 
done

这条语句就是ls得到目录里的内容,然后遍历该内容

进程替换

<(CMD)$(CMD)类似,<(CMD)会将CMD执行的的结果输出到一个临时文件中

示例:

diff <(ls d_1) <(ls d_2)

查看两个不同目录的内容,并将其存到临时文件中,使用diff判断目录内容的区别

通配符

符号 含义
* 匹配多个字符
? 匹配单个字符

花括号

在花括号中放入一些字符串,花括号将会展开执行命令

示例:

touch {1,2,3,4,5}

相当于执行了

touch 1
touch 2
touch 3
touch 4
touch 5

如果有多个{},将会按照笛卡尔积去执行
示例:

touch {1,2,3,4,5}-{a,b,c}

相当于执行了

touch 1-a
touch 1-b
touch 1-c
....
touch 5-c

shellcheck

Shellcheck可以用来检查shell脚本错误

课后作业

  1. 题目:
    ls格式化输出:
    • 彩色
    • 指定存储单位
    • 按最后修改时间排序
    • 所有文件
ls --block-size=M --color=always -lt -a

  1. 题目:
    编写两个shell脚本
    1. 每当你执行 marco 时,当前的工作目录应当以某种形式保存
    2. 当执行 polo 时,无论现在处在什么目录下,都应当 cd 回到当时执行 marco 的目录
#!/bin/bash
marco(){$(pwd) > ~/marco.log
}polo(){cd $(cat ~/marco.log)
}
  1. 题目:
    编写一段 bash 脚本,运行如下的脚本直到它出错,将它的标准输出和标准错误流记录到文件,并在最后输出所有内容。
#测试脚本
#!/usr/bin/env bashn=$(( RANDOM % 100 ))if [[ n -eq 42 ]]; thenecho "Something went wrong">&2 echo "The error was using magic numbers"exit 1
fi
echo "Everything went according to plan"
#!/bin/bash
count=0
echo > out.log
while true
do./testscript.sh &> out.logif [[ $? -ne 0 ]]; thencat out.logecho "次数:$count"breakfi((count++))
done
  1. 题目:
    您的任务是编写一个命令,它可以递归地查找文件夹中所有的 HTML 文件,并将它们压缩成 zip 文件
find / -name "*.html" | xargs zip html.zip 

xargs
5. 题目:
编写一个命令或脚本递归的查找文件夹中最近使用的文件
按照最近的使用时间列出文件

find . -type f -mmin -60 -print0 | xargs -0 ls -lt |head -10

特殊字符参考表

特殊字符 含义
$0 脚本名
$1~$9 脚本的第一到第九个参数
$@ 所有参数
$# 参数个数
$? 前一个命令的返回值
$$ 脚本的进程码
!! 完整的上一条命令
$_ 上一条命令的最后一个参数
$(CMD) 会首先执行CMD,将执行的内容作为返回值

原文章:http://www.ming-ice-tea.top/?p=28

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

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

相关文章

聊一聊 C#前台线程 如何阻塞程序退出

一:背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题:后台线程的内部是如何运转的 ? ,犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug,最后发现是有一个 Backgrond=false 的线程导致的。恰巧在我分析的350+dum…

聊一聊 C#后台线程 如何阻塞程序退出

一:背景 1. 讲故事 这篇文章起源于我的 C#内功修炼训练营里的一位朋友提的问题:后台线程的内部是如何运转的 ? ,犹记得C# Via CLR这本书中 Jeffery 就聊到了他曾经给别人解决一个程序无法退出的bug,最后发现是有一个 Backgrond=false 的线程导致的。恰巧在我分析的350+dum…

offset explorer如何安装?附获取方式

前言 大家好,我是小徐啊。我们在Java开发的时候,有时候需要进行大数据的开发,或者需要使用消息队列,这个时候,就需要用到kafka这个组件了。而对于我们平常运维来说,最好有一个可视化的连接kafka的工具。今天小徐就来介绍一款连接Kafka的工具,是offset explorer,介绍下w…

NUMA的取舍与优化设置

NUMA的取舍与优化设置在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%;在bios层面numa关闭时,无论os层面的numa是否打开,都不会影响性能。 安装numactl: #yum install numactl -y #numastat 等同于 cat /sys/devices/system/node/node0/numa…

2024-2025-1(20241321)《计算机基础与程序设计》第十三周学习总结

这个作业属于哪个课程 <班级的链接>(2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 <作业要求的链接>(2024-2025-1计算机基础与程序设计第十三周作业)这个作业的目标 <深刻学习C语言,反思一周学习,温故知新>作业正文 ... 本博客链接https://www.…

解决 PbootCMS 附件上传报错

根据你提供的信息,PbootCMS 附件上传时报错: 上传失败:UNKNOW: Code: 8192; Desc: stripos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior; File: /www/wwwroot/aaa.xxxx.com/core/fu…

如何修改网站的错误,网站错误排查与修复

网站错误可能由多种原因引起,以下是一些常见的排查和修复步骤:查看错误日志:在服务器上查看错误日志文件,通常位于 logs 文件夹中。 分析日志中的错误信息,确定问题原因。浏览器开发者工具:使用浏览器的开发者工具(F12),查看控制台中的错误信息。 检查网络请求,查看是…

如何在PbootCMS中增加对WebP和MOV文件类型的上传支持?

在PbootCMS中,默认情况下支持的上传文件类型可能不包括WebP和MOV。为了允许上传这些文件类型,你需要修改PbootCMS的配置文件和Ueditor编辑器的配置文件。以下是详细的步骤和说明: 1. 修改PbootCMS的配置文件 PbootCMS的上传配置位于 /config/config.php 文件中。你需要在这个…

易优CMS中的adv标签如何使用?

在易优CMS中,adv标签主要用于获取广告列表内容。这个标签非常灵活,可以通过设置不同的属性来控制广告的展示方式。基本的用法如下:html{eyou:adv pid=1 loop=3}<a href="{$field.links}"><img alt="{$field.title}" src="{$field.litpic}…

如何在易优CMS中输出单条广告的数据?

在易优CMS中,如果你希望输出单条广告的数据,可以使用ad标签。以下是一个具体的示例:{eyou:ad aid=37}<a href="{$field.links}" {$field.target}><img alt="{$field.title}" src="{$field.litpic}" /></a> {/eyou:ad}在这个…

2024-2025-1 20241314 《计算机基础与程序设计》第十三周学习总结

2024-2025-1 20241314 《计算机基础与程序设计》第十三周学习总结 作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十三周作业这个作业的目标作业正文 正文教材学习内容总结 第12章:文件操作 1. 文件的…

修改网站合同附件模板,如何在网站后台或代码中修改合同附件模板

修改网站的合同附件模板可以确保合同的规范性和一致性。以下是具体步骤:登录后台:如果网站有后台管理系统,使用管理员账号登录。 在后台左侧菜单栏中选择“内容” -> “页面”或“文件管理”。 找到需要修改的合同附件模板,点击“编辑”。准备新模板:准备新的合同附件模…