【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(七)-shell语法(5)

news2024/11/24 20:03:37

shell语法的一些知识和练习,可以当作笔记收藏一下!!

文章目录

前言

一、shell

二、shell语法

1.文件重定向

 2.引入外部脚本

 3.作业

总结


前言

shell语法的一些知识和练习,可以当作笔记收藏一下!!


提示:以下是本篇文章正文内容,下面案例可供参考

一、shell

hell是我们通过命令行与操作系统沟通的语言。

shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。
AC Terminal中的命令行可以看成是一个“shell脚本在逐行执行”。

Linux中常见的shell脚本有很多种,常见的有:

Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
zsh

Linux系统中一般默认使用bash,所以接下来讲解bash中的语法。
文件开头需要写#! /bin/bash,指明bash为脚本解释器。

二、shell语法

1.文件重定向

每个进程默认打开3个文件描述符:

  • stdin标准输入,从命令行读取数据,文件描述符为0
  • stdout标准输出,向命令行输出数据,文件描述符为1
  • stderr标准错误输出,向命令行输出数据,文件描述符为2

可以用文件重定向将这三个文件重定向到其他文件中。

重定向命令列表

命令    说明
command > file将stdout重定向到file中
command < file将stdin重定向到file中
command >> file将stdout以追加方式重定向到file中
command n> file将文件描述符n重定向到file中
command n>> file将文件描述符n以追加方式重定向到file中

输入和输出重定向:

echo "World" >> output.txt  # 将字符串追加到output.txt中

read str < output.txt  # 从output.txt中读取字符串

echo $str  # 输出结果:Hello World

同时重定向stdin和stdout
创建bash脚本: 

#! /bin/bash

read a
read b

echo $(expr "$a" + "$b")

创建input.txt,里面的内容为:

3
4
acs@9e0ebfcd82d7:~$ chmod +x test.sh  # 添加可执行权限
acs@9e0ebfcd82d7:~$ ./test.sh < input.txt > output.txt  # 从input.txt中读取内容,将输出写入output.txt中
acs@9e0ebfcd82d7:~$ cat output.txt  # 查看output.txt中的内容
7

 2.引入外部脚本

类似于C/C++中的include操作,bash也可以引入其他文件中的代码。

语法格式:

. filename  # 注意点和文件名之间有一个空格

或

source filename

示例
创建test1.sh,内容为:

#! /bin/bash

name=yxc  # 定义变量name

 然后创建test2.sh,内容为:

#! /bin/bash

source test1.sh # 或 . test1.sh

echo My name is: $name  # 可以使用test1.sh中的变量

执行命令:

acs@9e0ebfcd82d7:~$ chmod +x test2.sh 
acs@9e0ebfcd82d7:~$ ./test2.sh 
My name is: yxc

 3.作业

创建好作业后,先进入文件夹/home/acs/homework/lesson_3/,然后:
(0) 进入homework_0文件夹,编写自动完成lesson_1作业的脚本helper.sh。要求:
    [1] 当前目录下仅包含helper.sh


    [2] helper.sh具有可执行权限
 


(1) 进入homework_1文件夹,编写脚本check_file.sh。要求:
    [1] 当前目录下仅包含check_file.sh。


    [2] check_file.sh具有可执行权限。


    [3] check_file.sh接收一个传入参数。格式为 ./check_file.sh file
    [4] 判断传递参数,分别在标准输出中输出如下内容(不包括双引号):
        1) 如果传入参数个数不是1,则输出一行:"arguments not valid",然后退出,退出状态等于1。
        2) 如果file文件不存在,则输出一行:"not exist",然后退出,退出状态等于2。
        3) 如果file文件存在,则输出分别进行如下5个判断,然后退出,退出状态等于0。
            1] 如果file为普通文件,则输出一行:"regular file"
            2] 如果file为目录(文件夹),则输出一行:"directory"
            3] 如果file具有可读权限,则输出一行:"readable"
            4] 如果file具有可写权限,则输出一行:"writable"
            5] 如果file具有可执行权限,则输出一行:"executable"


(2) 进入homework_2文件夹,编写脚本main.sh。要求:
    [1] 当前目录下仅包含main.sh
    [2] main.sh具有可执行权限
    [3] 该文件从stdin(标准输入)中读取一个整数n
    [4] 在stdout(标准输出)输出斐波那契数列的第n项。即:a[0] = 1, a[1] = 1, a[i] = a[i - 1] + a[i - 2], 求a[n]。
    [5] 数据保证 0 <= n <= 20,脚本不需要判断n的合法性。

(3) 进入homework_3文件夹,编写脚本main.sh。要求:
    [1] 当前目录下仅包含main.sh
    [2] main.sh具有可执行权限
    [3] 该文件从stdin(标准输入)中读取两行整数n和m
    [4] 在stdout(标准输出)中输出1~n的按字典序从小到大的顺序数第m个全排列,输出一行,用空格隔开所有数,行末可以有多余空格。
    [5] 数据保证 1 <= n <= 10, 1 <= m <= min(100, n!),脚本不需要判断数据的合法性。

 

 

#! /bin/bash

read n
read m

#:<<EOF
for (( i = 1; i <= n; i ++ ))
do
    st[$i]=0
    p[$i]=0
done

dfs(){
    if [ $1 -eq $n ]
    then
        m=$(expr $m - 1)
        if [ $m -eq 0 ]
        then
            for (( i = 0; i < n; i ++ ))
            do
                echo -e "${p[$i]} \c"
            done
            echo ''
        return 0
        fi
        return 1
    fi
    local j=0
    for (( j = 1; j <= n; j ++ ))
    do
        if [ ${st[$j]} -eq 0 ]
        then
            p[$1]=$j
            st[$j]=1
            #x=$(expr $1 + 1)
            if dfs $(expr $1 + 1)
            then
                return 0
            fi
            st[$j]=0
        fi
    done
    return 1
}
dfs 0
#EOF


(4) 进入homework_4文件夹,编写脚本main.sh。要求:
    [1] 当前目录下仅包含main.sh
    [2] main.sh具有可执行权限
    [3] main.sh接收两个传入参数。格式为 ./main.sh input_file output_file
    [4] 从input_file中读取一个正整数n,然后将前n个正整数的平方和写入output_file中
    [5] 数据保证 1 <= n <= 100,脚本不需要判断所有数据的合法性。

#! /bin/bash

:<<EOF
input_file=$1
output_file=$2
EOF

#read n < $input_file
read n < $1
sum=0

for (( i = 1; i <= n; i ++ ))
do
    sqr=$(expr $i \* $i)
    sum=$(expr $sum + $sqr)
done

#echo $sum > $output_file
echo $sum > $2


总结

上述是shell语法的一些知识和练习,可以当作笔记收藏一下!!

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

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

相关文章

01:Linux的基本命令

Linux的基本命令 1、常识1.1、Linux的隐藏文件1.2、绝对路径与相对路径 2、基本命令2.1、ls2.2、cd2.3、pwd / mkdir / mv / touch / cp / rm / cat / rmdir2.4、ln2.5、man2.6、apt-get 本教程是使用的是Ubuntu14.04版本。 1、常识 1.1、Linux的隐藏文件 在Linux中&#xf…

全网首发-RocketMQ 4.0实现完美灰度发布方案

一、背景 为了控制发版带来的影响面等问题&#xff0c;我们公司基建团队自研灰度发布流程&#xff0c;目前几乎所有服务发版都会严格先走灰度发布验证再上线。当前已支持http、gRPC等接口调用方式进行灰度流量转发&#xff0c;使用消息队列进行业务实现的场景的暂不支持。 ps:…

优思学院|亚马逊如何因六西格玛而取得成功?

前言 上星期三&#xff0c;亚马逊&#xff08;Amazon&#xff09;市值首次超过2万亿美元&#xff0c;成为世界第五大巿值最高的企业&#xff0c;它是全球最大的互联网线上零售商之一。然而&#xff0c;或者你并不知道&#xff0c;亚马逊也是众多因六西格玛而取得成功的公司之一…

企业自身数据保护技巧你知道多少?用堡垒机可以实现吗?

随着企业数字化转型&#xff0c;越来越多的企业开始重视企业自身数据的安全&#xff0c;开始寻找保障数据安全的方法技巧。不少人在问&#xff0c;企业自身数据保护技巧有哪些&#xff1f;你知道吗&#xff1f;用堡垒机可以实现吗&#xff1f;今天我们来简单聊聊。 企业自身数据…

【udp报文】udp报文未自动分片,报文过长被拦截问题定位

问题现象 某局点出现一个奇怪的现象&#xff0c;客户端给服务端发送消息&#xff0c;服务端仅能收到小部分消息&#xff0c;大部分消息从客户端发出后&#xff0c;服务端都未收到。 问题定位 初步分析 根据现象初步分析&#xff0c;有可能是网络原因导致消息到服务端不可达&a…

湿法工艺特氟龙刻蚀清洗架 耐强酸四氟晶圆盒应用半导体行业

四氟花篮又叫四氟清洗花蓝 、 特氟龙卡匣、 特氟龙晶舟盒、特氟龙晶圆盒、特氟龙晶片清洗架、特氟龙晶圆架、特氟龙刻蚀花篮、特氟龙刻蚀清洗架、PTFE显影花篮 。四氟花篮在半导体、多晶硅、新能源、新材料、太阳能等行业广泛应用 。具备耐腐蚀性、耐高温性、不粘性、绝缘性、防…

SAR目标检测

Multi-Stage with Filter Augmentation 多阶段滤波器增强(MSFA) 对SAR合成孔径雷达目标检测性能的改善 MSFA ON SAR 传统方法: 预训练:传统方法开始于在通用数据集上预训练一个基础模型。 微调:这个预训练的模型会被微调以适应特定的SAR图像&#xff0c;试图缩小域间的差距 …

应急灯、车库灯毫米波雷达人体存在传感器模块,超低功耗uA级别,飞睿智能LED照明控制,抗干扰、远距离、参数可调

在智能化、自动化的浪潮中&#xff0c;我们的生活正在经历一场前所未有的创新。无论是智能家居、智能交通还是智能安防&#xff0c;科技的力量正在悄然改变着我们的生活。而在这场创新中&#xff0c;毫米波雷达人体存在传感器模块凭借其独特的优势&#xff0c;成为了智能设备中…

秋招——MySQL补充——MySQL是如何加行级锁

文章目录 引言正文什么SQL语句会加行级锁查询操作增加对应的行级锁事务的写法 update和delete修改操作也会增加行级锁 行级锁有哪些种类记录锁间隙锁Next-Key锁 MySQL是如何加行级锁&#xff1f;唯一索引等值查询查询记录是存在的查询记录是不存在的 唯一索引范围查找针对大于或…

一个暑假如何学习单片机

一个暑假是学习和掌握单片机基础知识的良好时机。以下是一个关于如何在暑假期间学习单片机的建议计划&#xff1a; 1. 了解基础知识 查阅资料&#xff1a;首先&#xff0c;了解单片机是什么&#xff0c;它的工作原理、常见型号和应用场景。学习编程语言&#xff1a;单片机通常…

【区块链+基础设施】蜀信链 | FISCO BCOS应用案例

蜀信链是在四川省经济和信息化厅指导下&#xff0c;在四川省区块链行业协会组织下&#xff0c;由全省区块链相关从业与应用机构 共同参与建设和运营的区域性区块链基础设施&#xff0c;通过多方协同&#xff0c;共同打造合作共赢的区块链产业生态。 蜀信链区块链服务生态秉承“…

移动网络捕获在数字化转型中的重要性

数字化转型重新定义了企业运营和与客户互动的方式。它为组织提供价值的方式带来了根本性的转变&#xff0c;使流程更易于访问、更高效、更具协作性和更安全。然而&#xff0c;跟上不断发展的数字环境可能是一项挑战&#xff0c;而未能接受数字化转型的企业则面临被淘汰的风险。…

农作物监测新利器:免费可视化工具让数据说话

从传统的“靠天吃饭”到如今的“智慧农业”&#xff0c;数据成为了驱动这一转变的关键力量。随着物联网、大数据、云计算等技术的深入应用&#xff0c;农业生产过程中的各类数据如雨后春笋般涌现。从土壤湿度、光照强度到作物生长周期、病虫害情况等&#xff0c;这些数据背后隐…

电路模型和电路定律

电路---为了某种需要由某些电工设备或元件按一定方式组合起来的电流的通路 实际电路的两个作用 1.电能的传输&#xff0c;分配和转换 2.传递和处理信号 电路中的几个基本概念 激励---电源或信号源的电压或电流&#xff0c;也称为输入 响应---由激励在电路各部分产生的电流…

基于ESP32 IDF的WebServer实现以及OTA固件升级实现记录(三)

经过前面两篇的前序铺垫&#xff0c;对webserver以及restful api架构有了大体了解后本篇描述下最终的ota实现的代码以及调试中遇到的诡异bug。 eps32的实际ota实现过程其实esp32官方都已经基本实现好了&#xff0c;我们要做到无非就是把要升级的固件搬运到对应ota flash分区里面…

应用密码学—(扩展)欧几里得、DES、RSA、SHA-1算法

1. 欧几里得算法 1.1 分析算法的实现原理 欧几里德&#xff08;Euclid&#xff09;算法&#xff0c;也既常说的“辗转相除法”&#xff0c;公式为gcd(m, n) { return gcd(n, m%n); }&#xff0c;对于任意两个正整数m、n&#xff0c;每次求的一个数字r m % n&#xff0c;然后把…

气膜馆一小时电费有多高—轻空间

气膜馆因其独特的设计和功能性&#xff0c;广泛应用于体育场馆、展览馆和临时建筑等多个领域。除了其便捷的搭建和拆卸外&#xff0c;运营成本&#xff0c;尤其是电费&#xff0c;成为了许多关注气膜馆用户的重点。轻空间将详细分析气膜馆一小时的电费构成&#xff0c;并探讨其…

跨境电商自养号全攻略:TEMU、Shein、速卖通测评技巧揭秘

TEMU、Shein、速卖通等跨境平台都推出了全托管模式&#xff0c;普通平台讲究排名&#xff0c;销量&#xff0c;流量量&#xff0c;转化率等等。那么全托管为什么需要做测评呢&#xff1f;因为全托管平台讲究的是一个动销率&#xff0c;有的新品上架或许很快就出单&#xff0c;而…

【每日一练】Python遍历循环

1. 情节描述&#xff1a;上公交车(10个座位)&#xff0c;并且有座位就可以坐下 要求&#xff1a;输入公交卡当前的余额&#xff0c;只要超过2元&#xff0c;就可以上公交车&#xff1b;如果车上有空座位&#xff0c;才可以上。 seat 10 while seat > 0:money int(input(…

2024 年如何构建 AI 软件

人工智能 (AI) 是当今 IT 行业最热门的话题&#xff0c;受到大型科技公司、大型企业和投资者的青睐。如果有人不参与 AI&#xff0c;他们就出局了。虽然“AI 泡沫”一词尚未公开使用&#xff0c;但街上的每个人都可能听说过 AI 将取代我们的工作&#xff08;可能不会&#xff0…