鸟哥的Linux私房菜 学习 Shell Scripts

news2025/1/23 22:27:53

第十三章、学习 Shell Scripts

重点回顾

  • shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文字档,将一些 shell 的语法与命令(含外部命令)写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的

更多参考http://cn.linux.vbird.org/linux_basic/0340bashshell-scripts.php#hint

本章习题

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

1_whoami.sh

#!/bin/bash

echo "目前的身份: $(whoami)"
echo "目前所在的目录: $(pwd)"

  • 请自行创建一支程序,该程序可以用来计算『你还有几天可以过生日』啊
    2_date.sh
 now=$(date +%m%d)
if [ "$birthday" == "$now" ]; then
    echo "Happy birthday to you!"
elif [ "$birthday" -gt "$now" ]; then
    year=$(date +%Y)
    total_d=$(($((`date --date="$year$birthday" +%s`-`date +%s`))/60/60/24))
    echo "Your birthday will be $total_d later"
else
    year=$(($(date +%Y)+1))
    total_d=$(($((`date --date="$year$birthday" +%s`-`date +%s`))/60/60/24))
    echo "Your birthday will be $total_d later"
fi

在这里插入图片描述
参考答案

#!/bin/bash
read -p "Pleas input your birthday (MMDD, ex> 0709): " bir
now=`date +%m%d`
if [ "$bir" == "$now" ]; then
    echo "Happy Birthday to you!!!"
elif [ "$bir" -gt "$now" ]; then
    year=`date +%Y`
    total_d=$(($((`date --date="$year$bir" +%s`-`date +%s`))/60/60/24))
    echo "Your birthday will be $total_d later"
else
    year=$((`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… 一直累加到使用者输入的数字为止。
    3_while.sh
#!/bin/bash

read -p "输入一个数字: " n
s=0 #累加值
i=0

# while [ $i != $n ]
while [ $i -lt "$n" ] # -lt <
do
	i=$((i+1))
	s=$((s+i))
done

echo "The result of '1+2+3+...+$n' is ==> $s"

3_for.sh

#!/bin/bash

read -r -p "输入一个数字: " n
s=0 #累加值

for i in $(seq 1 $n)
do
	s=$((s+i))
done

echo "The result of '1+2+3+...+$n' is ==> $s"

3_for_c.sh

#!/bin/bash

read -r -p "输入一个数字: " n
s=0 #累加值

for (( i=1;i<=n;i+=1 ))
do
	s=$((s+i))
done

echo "The result of '1+2+3+...+$n' is ==> $s"

在这里插入图片描述

  • 撰写一支程序,他的作用是: 1.) 先查看一下 /root/test/logical 这个名称是否存在; 2.) 若不存在,则创建一个文件,使用 touch 来创建,创建完成后离开; 3.) 如果存在的话,判断该名称是否为文件,若为文件则将之删除后创建一个目录,档名为 logical ,之后离开; 4.) 如果存在的话,而且该名称为目录,则移除此目录!
    4_file.sh
#!/bin/bash

name='logical' #'/root/test/logical'
if [ -e $name ]  #查看一下名称是否存在
then
    if [ -f $name ]  #如果存在的话,判断该名称是否为文件
    then
        #若为文件则将之删除后创建一个目录
        rm -f $name
        mkdir $name
    elif [ -d $name ]    #如果存在的话,而且该名称为目录,则移除此目录
    then
        rm -rf $name
    fi
else
    touch $name  #若不存在,则创建一个文件
fi

在这里插入图片描述
参考答案

#!/bin/bash
if [ ! -e logical ]; then
    touch logical
    echo "Just make a file logical"
    exit 1
elif [ -e logical ] && [ -f logical ]; then
    rm logical
    mkdir logical
    echo "remove file ==> logical"
    echo "and make directory logical"
    exit 1
elif [ -e logical ] && [ -d logical ]; then
    rm -rf logical
    echo "remove directory ==> logical"
    exit 1
else
    echo "Does here have anything?"
fi

在这里插入图片描述

  • 我们知道 /etc/passwd 里面以 : 来分隔,第一栏为帐号名称。请写一只程序,可以将 /etc/passwd
    的第一栏取出,而且每一栏都以一行字串『The 1 account is “root” 』来显示,那个 1 表示行数。
#!/bin/bash

# users=$(cut -d ':' -f1 /etc/passwd)
users=$(cat /etc/passwd | cut -d ':' -f1)
num=0
for username in $users
do
    (( num=num+1 ))
    echo "The $num account is \"$username\""  
done

在这里插入图片描述

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

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

相关文章

代码随想录算法训练营第五十三天 | 1143.最长公共子序列、1035.不相交的线、 53. 最大子序和 动态规划

打卡第53天 今日任务 1143.最长公共子序列 1035.不相交的线 53.最大子序和 动态规划 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这…

i.MX6ULL 开发板-Mqtt 移植

转载&#xff1a;http://e.betheme.net/article/show-149636.html?actiononClick PS&#xff1a; 订阅主题&#xff0c;命令如下&#xff1a; mosquitto_sub -h localhost -t "mqtt" -v 发布主题&#xff0c;命令如下&#xff1a; mosquitto_pub -h localhost -…

96年阿里P7晒出工资单:狠补了这个,真香...

最近一哥们跟我聊天装逼&#xff0c;说他最近从阿里跳槽了&#xff0c;我问他跳出来拿了多少&#xff1f;哥们表示很得意&#xff0c;说跳槽到新公司一个月后发了工资&#xff0c;月入5万多&#xff0c;表示很满足&#xff01;这样的高薪资着实让人羡慕&#xff0c;我猜这是税后…

使用qt调用c#编写的dll库

问题背景 我需要使用qt编写界面程序来操作设备&#xff0c;设备厂家提供了一个使用C#编写的dll库&#xff0c;里面包含了各种操作设备的函数。而我不想学习C#&#xff0c;使用C来调用dll库的话&#xff0c;不论是显示调用&#xff08;提供h文件&#xff0c;dll文件&#xff09…

【操作系统复习】第4章 进程同步

进程同步的概念 主要任务 ➢ 使并发执行的诸进程之间能有效地共享资源和相互合作&#xff0c;从而使程序的执行具有可再现性。 进程间的制约关系 ➢ 间接相互制约关系(互斥关系) • 进程互斥使用临界资源 ➢ 直接相互制约关系&#xff08;同步关系&#xff09; •…

GDPU C语言 天码行空5

&#x1f648; 仅供参考,欢迎指正 填空(语法题) 1. 9.502. 03. 2.504. 3.505. 16. 07. 78. 09. 110. 011. 112. 113. 014. 115. 2416. 6017. 018. 319. 020. 64⭐ 直接拷贝输出就好 #include<stdio.h>int main(){// 1 // printf("%…

Java基础——日志,Logback入门

日志 &#xff08;1&#xff09;程序中的日志&#xff1a; 程序中的日志可以用来记录程序运行过程中的信息&#xff0c;并可以永久存储。&#xff08;2&#xff09;日志技术具备的优势&#xff1a; 可以将系统执行的信息选择性的记录到指定位置&#xff08;控制台&#xff0…

GEE:支持矢量机(SVM)分类教程

在Google Earth Engine平台上,使用支持向量机(SVM)进行土地利用分类是一种强大的技术。在本文中,我们将介绍如何使用GEE和SVM算法进行土地利用分类。 结果展示, 具体过程如下: 数据准备 首先,我们需要准备用于分类的地理空间数据,包括土地覆盖类型和地表特征数据。GE…

队列知识及编程练习总结

目录 一、背景知识 二、队列的应用 &#xff08;一&#xff09;在Spring中的应用 &#xff08;二&#xff09;在其他框架中的应用 &#xff08;三&#xff09;在实际开发中的应用 三、相关编程练习 &#xff08;一&#xff09;用队列实现栈 &#xff08;二&#xff09…

【CE】Mac下的CE教程Tutorial:进阶篇(第8关:多级指针)

▒ 目录 ▒&#x1f6eb; 导读开发环境1️⃣ 第8关&#xff1a;多级指针翻译操作验证其它方案&#x1f6ec; 文章小结&#x1f4d6; 参考资料&#x1f6eb; 导读 开发环境 版本号描述文章日期2023-03-操作系统MacOS Big Sur 11.5Cheat Engine7.4.3 1️⃣ 第8关&#xff1a;多…

DCT-Net工业级轻量化人像漫画

工业级轻量AI人像漫画开源模型技术解析_哔哩哔哩_bilibiliModelScope 旨在打造下一代开源的模型即 服务共享平台&#xff0c;为泛 AI 开发者提供灵活、易用、低成本的一站式模型服务产品&#xff0c;让模型应用更简单&#xff01;欢迎使用魔搭社区&#xff1a;ModelScope.cn, 视…

JVM:线上服务CPU爆满,如何排查(三)

0. 引言 前一段时间出现了一个正则表达式引起的线上CPU爆满的问题&#xff0c;一开始没有在第一时间定位到问题&#xff0c;这里也特此记录一下&#xff0c;同时也系统的梳理下CPU爆满问题的排查思路和方法&#xff0c;为后续的同学提供参考。 1. CPU爆满问题产生的原因 我们…

八大排序算法之插入排序、希尔排序、选择排序

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【数据结构初阶&#xff08;C实现&#xff09;】 本篇主要讲解八大排序算法中的三种排序&#xff0c;分别是&#xff1a;插入排序、希尔排…

yum源配置

一、互联网yum源&#xff08;centos7为例&#xff09;: cd /etc/yum.repos.d/ && rm -f *.repo;wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo…

Golang编译报错 ‘invalid char’

现象 最近在新电脑安装go环境&#xff0c;发现 golang 包名如果有汉字就不能编译运行。 具体来讲&#xff0c;就是 go mod tidy 报错 ‘invalid char’ 但是&#xff0c;我在以前的电脑上运行 go mod tidy 没有问题 原因 我对比了 go sdk 版本&#xff0c;旧电脑用 go 1.13…

Html5钢琴块游戏制作(音乐游戏)

当年一款手机节奏音游&#xff0c;相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法&#xff1a;点击下落的黑色方块&#xff0c;弹奏音乐。&#xff08;下落的速度会越来越快&#xff09; 可以进行试玩&#xff0c;手机玩起来效果会更好些。 点击…

Java就业前景如何?

Java还有出路吗&#xff1f;2023年的就业市场依然经历着面临挑战&#xff0c;很多有经验有技术的人被淘汰下来&#xff0c;而马上又有一千多万的新鲜血液涌入就业市场。经济大环境对于各行各业的影响是非常大的&#xff0c;也为IT行业的内卷推波助澜。在2023年想学习Java入行就…

面试造航母,入职拧螺丝,工资...

有粉丝跟我吐槽说&#xff1a;金三银四去面试软件测试岗&#xff0c;真的是面试造航母&#xff0c;入职拧螺丝&#xff0c;工资还低 这种现象很正常&#xff0c;因为找一个测试员&#xff0c;当然希望他能做的业务越多越好&#xff0c;最好像机器猫一样&#xff0c;啥事儿都能…

Chatgpt 实践经验分享

数据准备&#xff1a;ChatGPT 需要大量的训练数据来支撑模型的训练和优化&#xff0c;因此需要进行充分的数据准备。在数据准备方面&#xff0c;需要考虑数据的质量、覆盖范围以及数据的预处理方式等。模型训练&#xff1a;ChatGPT 使用端到端学习的方式训练模型&#xff0c;需…

自动控制原理模拟卷1

自动控制原理模拟题一 Question1 已知机械系统和电网络如下图所示,求解两个系统的传递函数,并证明这两个系统是相似系统. 解: 【图a系统】 由电网络原理图并根据复阻抗原理,可得系统传递函数为: E o ( s ) E i