当前位置: 首页 > news >正文

鸟哥的Linux私房菜 Shell脚本

第十二章、学习 Shell Scripts

https://linux.vbird.org/linux_basic/centos7/0340bashshell-scripts.php

12.2 简单的 shell script 练习

#!/bin/bash# Program:
#       User inputs his first name and last name.  Program shows his full name.read -p "Please input your first name: " firstname      # 提示使用者输入
read -p "Please input your last name:  " lastname       # 提示使用者输入echo -e "\nYour full name is: ${firstname} ${lastname}" # 结果由屏幕输出

在这里插入图片描述

12.3 善用判断式

file_perm.sh v1

#!/bin/bash# Program:
#       User inputs his first name and last name.  Program shows his full name.#!/bin/bashread -p "输入一个文件名: " filename	# 提示使用者输入
if [ -e ${filename} ]
thenif [ -f ${filename} ]thenecho "${filename} is regular file" # 文件elif [ -d ${filename} ]then echo "${filename} is directory" # 目录fiif [ -r ${filename} ]thenecho "${filename} can be read" # 可读elseecho "${filename} cannot be read"fi
elseecho "${filename} does not exist"
fi

在这里插入图片描述

file_perm.sh v2

#!/bin/bash
# Program:
#	User input a filename, program will check the flowing:
#	1.) exist? 2.) file/directory? 3.) file permissions echo -e "Please input a filename, I will check the filename's type and permission. \n\n" # -e to \n
read -p "Input a filename: " filename	# 提示使用者输入
if [ -e ${filename} ]
thenif [ -f ${filename} ]thenfiletype="regulare file" # 文件elif [ -d ${filename} ]then filetype="directory" # 目录fiecho "${filename} is ${filetype}" # 文件类型if [ -r ${filename} ]thenperm="readable"	# 可读elif [ -w ${filename} ]thenperm="${perm} writable" # 可写elif [ -x ${filename} ]thenperm="${perm} executable" # 可执行fiecho "The permissions of ${filename} are: ${perm}" # 文件所拥有的权限
elseecho "${filename} does not exist"exit 1
fi

在这里插入图片描述
在这里插入图片描述
shift_paras.sh

#!/bin/bash
# Program:
#       Program shows the script name, parameters...echo "The script name is        ==> ${0}"
echo "Total parameter number is ==> $#"
echo "Your whole parameter is   ==> '$@'"
shift # 第一次 偏移
if [ "$#" -lt 2 ]
thenecho "The number of parameter is less than 2.  Stop here." exit 0
fi
echo "Total parameter number is ==> $#"
echo "Your whole parameter is   ==> '$@'"
shift 3 # 第二次 偏移
echo "Total parameter number is ==> $#"
echo "Your whole parameter is   ==> '$@'"

在这里插入图片描述
hello-2.sh

#!/bin/bash
# Program:
#	Check $1 is equal to "hello"if [ "${1}" == "hello" ]; thenecho "Hello, how are you?"
elif [ "${1}" == "" ]; thenecho "You MUST input parameters, ex> {${0} someword}"
else echo "The only parameter is 'hello', ex> {${0} hello}"
fi

在这里插入图片描述
hello-3.sh

#!/bin/bash
# Program:
# 	Show "Hello" from $1.... by using case .... esaccase ${1} in"hello")echo "Hello, how are you ?" ;;"")echo "You MUST input parameters, ex> {${0} someword}" ;;*)echo "Usage ${0} {hello}" ;;
esac

在这里插入图片描述

12.8 本章习题

(要看答案请将鼠标移动到答:'底下的空白处,按下左键圈选空处即可察看) 底下皆为实作题,请自行撰写出程序喔!

  • 请建立一支 script ,当你执行该 script 的时候,该 script 可以显示: 1. 你目前的身份 (用 whoami ) 2. 你当前所在目录 (用 pwd)

script1.sh

#!/bin/bash
echo -e "目前的身份: $(whoami)\n"
echo "当前所在目录: $(pwd)"

在这里插入图片描述

  • 请自行建立一支程序,该程序可以用来计算’你还有几天可以过生日’啊?
    script2.sh
#!/bin/bash
read -p "Pleas input your birthday (MMDD, ex> 0709): " bir
now=$(date +%m%d)
if [ "$bir" == "$now" ]; thenecho "Happy Birthday to you!!!"
elif [ "$bir" -gt "$now" ]; thenyear=$(date +%Y)total_d=$(($(($(date --date="$year$bir" +%s)-$(date +%s)))/60/60/24))echo "Your birthday will be $total_d later"
elseyear=$(($(date +%Y)+1))total_d=$(($(($(date --date="$year$bir" +%s)-$(date +%s)))/60/60/24))echo "Your birthday will be $total_d later"
fi

在这里插入图片描述
在这里插入图片描述

  • 让用户输入一个数字,程序可以由 1+2+3… 一直累加到用户输入的数字为止。
    script3.sh
    while
#!/bin/bashread -p "输入一个数字: " n
sum=0
i=0
while [ "${i}" != "${n}" ]
doi=$(($i+1))sum=$(($sum+$i))
done
echo "The result of 1+2+3+...+$n is ==> $sum"

在这里插入图片描述
for

#!/bin/bashread -p "输入一个数字: " n
sum=0
i=0
for (( i=1; i<=$n; i++ ))
dosum=$(($sum+$i))
done
echo "The result of '1+2+3+...+${n}' is ==> $sum"

在这里插入图片描述

  • 撰写一支程序,他的作用是: 1.) 先查看一下 /root/test/logical 这个名称是否存在; 2.) 若不存在,则建立一个档案,使用 touch 来建立,建立完成后离开; 3.) 如果存在的话,判断该名称是否为档案,若为档案则将之删除后建立一个目录,文件名为 logical ,之后离开; 4.) 如果存在的话,而且该名称为目录,则移除此目录!
    script4.sh
#!/bin/bashfilename='/root/test/logical'
if [ -e $filename ]; then# 名称存在if [ -f $filename ]; then# 判断该名称是否为文件rm -f $filenamemkdir $filenameelif [ -d $filename ]; then# 名称为目录rm -rf $filenamefi      
elsetouch $filenameexit 1
fi      

在这里插入图片描述

  • 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为账号名称。 请写一只程序,可以将 /etc/passwd 的第一栏取出,而且每一栏都以一行字串『The 1 account is “root” 』来显示,那个 1 表示行数。
    script5.sh
#!/bin/bashaccounts=$(cat /etc/passwd | cut -d ":" -f1)for account in $accounts
do      declare -i i=$i+1echo "The $i account is \"$account\""
done    

相关文章:

鸟哥的Linux私房菜 Shell脚本

第十二章、学习 Shell Scripts https://linux.vbird.org/linux_basic/centos7/0340bashshell-scripts.php 12.2 简单的 shell script 练习 #!/bin/bash# Program: # User inputs his first name and last name. Program shows his full name.read -p "Please in…...

FPGA基于RIFFA实现PCIE采集ov5640图像传输,提供工程源码和QT上位机

目录1、前言2、RIFFA理论基础3、设计思路和架构4、vivado工程详解5、上板调试验证并演示6、福利&#xff1a;工程代码的获取1、前言 PCIE是目前速率很高的外部板卡与CPU通信的方案之一&#xff0c;广泛应用于电脑主板与外部板卡的通讯&#xff0c;PCIE协议极其复杂&#xff0c…...

week13周报

一.动态规划走楼梯2难点&#xff1a;不能连续走三次两级台阶如何表示思路&#xff1a;可以用二维数组f[i][j],i表示当前台阶数&#xff0c;j表示已经连续走了j次二级台阶了转移方程&#xff1a;f[i2][j1]f[i2][j1]f[i][j] 当j&#xff01;2时&#xff0c;我们可以选择走二级台阶…...

离散选择模型中的分散系数theta到底该放在哪里呢?

前言 \quad~~一直都在想为啥子离散选择模型中分散系数以分母形式出现而在路径选择公式中以系数形式出现呢&#xff1f;看着公式想了想&#xff0c;现在想出了一个似乎感觉应该差不多很合理的答案&#xff0c;希望与大家一起探讨。 进入正题 根据随机效用理论&#xff0c;决策…...

【CSAPP】进程 | 上下文切换 | 用户视角下的并发进程

&#x1f4ad; 写在前面&#xff1a;本文将学习《深入理解计算机系统》的第六章 - 关于异常控制流和系统级 I/O 的 进程部分。CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写&#xff0c;该教材由Randal E. Bryant和David R. OHallaron 合著…...

节流还在用JS吗?CSS也可以实现哦

函数节流是一个我们在项目开发中常用的优化手段&#xff0c;可以有效避免函数过于频繁的执行。一般函数节流用在scroll页面滚动&#xff0c;鼠标移动等。 为什么需要节流呢&#xff0c;因为触发一次事件就会执行一次事件&#xff0c;这样就形成了大量操作dom,会出现卡顿的情况…...

带你看看 TypeScript 5.0 的新特性

一、写在前面 TypeScript 5.0 已经于 2023 年 3 月 16 日发布了&#xff0c;带来了许多新功能&#xff0c;同时也在性能方面进行了优化&#xff0c;下面让我们来一起看看新版 TypeScript 中比较有重要的变化吧。 二、新特性 2-1、速度、包体积优化 首先是新版本性能的提升&…...

C语言预处理条件语句的 与或运算

C语言预处理条件语句的 与或运算 1.#ifdef 与或运算 #ifdef (MIN) && (MAX) ----------------------------错误使用 #if defined(MIN) && defined(MAX) ---------------- 正确使用 #ifdef (MIN) || (MAX) -----------------------------错误使用 …...

从零实现深度学习框架——学习率调整策略介绍

引言 本着“凡我不能创造的,我就不能理解”的思想,本系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。 要深入理解深度学习,从零开始创建的经验非常重要,从自己可以理解的角度出发,尽量不使用外部完备的框架前提下,实现我…...

系统架构:经典三层架构

引言 经典三层架构是分层架构中最原始最典型的分层模式&#xff0c;其他分层架构都是其变种或扩展&#xff0c;例如阿里的四层架构模式和DDD领域驱动模型。阿里的 四层架构模型在三层基础上增加了 Manager 层&#xff0c;从而形成变种四层模型&#xff1b;DDD架构则在顶层用户…...

数据结构--二叉树

目录1.树概念及结构1.1数的概念1.2数的表示2.二叉树概念及结构2.1二叉树的概念2.2数据结构中的二叉树2.3特殊的二叉树2.4二叉树的存储结构2.4.1顺序存储2.4.2链式存储2.5二叉树的性质3.堆的概念及结构3.1堆的实现3.1.1堆的创建3.1.2堆的插入3.1.3堆顶的删除3.1.4堆的代码实现3.…...

Keil5安装和使用小记

随着keil版本的更新&#xff0c;一些使用问题一随之产生。本文针对安装目前最新版本keil软件和使用问题做一些总结。 目录1 Keil5下载&安装1.1 官网下载链接1.2 软件安装1.2.1 安装说明1.2.2 关于 51 和 ARM 共存的问题1.3 软件破解2 pack包安装 & 破解2.1 下载2.2 安装…...

多机器人集群网络通信协议分析

本文讨论的是多机器人网络通信各层的情况和协议。 每个机器人连接一个数据传输通信模块&#xff08;以下简称为数传&#xff0c;也泛指市面上的图传或图数一体的通信模块&#xff09;&#xff0c;数传之间进行组网来传递信息。 根据ISO的划分&#xff0c;网络通信的OSI模型分…...

【PyTorch】手把手带你快速搭建PyTorch神经网络

手把手带你快速搭建PyTorch神经网络1. 定义一个Class2. 使用上面定义的Class3. 执行正向传播过程4. 总结顺序相关资料话不多说&#xff0c;直接上代码1. 定义一个Class 如果要做一个神经网络模型&#xff0c;首先要定义一个Class&#xff0c;继承nn.Module&#xff0c;也就是i…...

【完整代码】用HTML/CSS制作一个美观的个人简介网页

【完整代码】用HTML/CSS制作一个美观的个人简介网页整体结构完整代码用HTML/CSS制作一个美观的个人简介网页——学习周记1HELLO&#xff01;大家好&#xff0c;由于《用HTML/CSS制作一个美观的个人简介网页》这篇笔记有幸被很多伙伴关注&#xff0c;于是特意去找了之前写的完整…...

Java分布式事务(九)

文章目录&#x1f525;XA强一致性分布式事务实战_Atomikos介绍&#x1f525;XA强一致性分布式事务实战_业务说明&#x1f525;XA强一致性分布式事务实战_项目搭建&#x1f525;XA强一致性分布式事务实战_多数据源实现&#x1f525;XA强一致性分布式事务实战_业务层实现&#x1…...

基于深度学习的动物识别系统(YOLOv5清新界面版,Python代码)

摘要&#xff1a;动物识别系统用于识别和统计常见动物数量&#xff0c;通过深度学习技术检测日常几种动物图像识别&#xff0c;支持图片、视频和摄像头画面等形式。在介绍算法原理的同时&#xff0c;给出Python的实现代码、训练数据集以及PyQt的UI界面。动物识别系统主要用于常…...

K8S集群之-ETCD集群监控

### 生产ETCD集群监控核心指标 etcd服务存活状态 ​ up{job~"kubernetes-etcd.*"}0 ​ 说明&#xff1a;up0代表服务挂掉 etcd是否有脱离情况 etcd_server_has_leader{job~"kubernetes-etcd.*"}0 说明&#xff1a;每个instance&#xff0c;该值应该都…...

一文弄懂熵、交叉熵和kl散度(相对熵)

一个系统中事件发生的概率越大&#xff0c;也就是其确定性越大&#xff0c;则其包含的信息量越少&#xff0c;可以认为一个事件的信息量就是该事件发生难度的度量&#xff0c;事件所包含的信息量越大则其发生的难度越大。并且相互独立的事件&#xff0c;信息量具有可加性。相互…...

10从零开始学Java之开发Java必备软件Intellij idea的安装配置与使用

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者前言壹哥在前面的文章中&#xff0c;带大家下载、安装、配置了Eclipse这个更好用的IDE开发工具&#xff0c;并教会了大家如何在Ecli…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动

一、前言说明 在2011版本的gb28181协议中&#xff0c;拉取视频流只要求udp方式&#xff0c;从2016开始要求新增支持tcp被动和tcp主动两种方式&#xff0c;udp理论上会丢包的&#xff0c;所以实际使用过程可能会出现画面花屏的情况&#xff0c;而tcp肯定不丢包&#xff0c;起码…...

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

C语言中提供的第三方库之哈希表实现

一. 简介 前面一篇文章简单学习了C语言中第三方库&#xff08;uthash库&#xff09;提供对哈希表的操作&#xff0c;文章如下&#xff1a; C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...