shell命令编写

 1.

  1 #!/bin/bash 
  2 
  3 directory_path="/txh"
  4 
  5 # 使用 find 命令查找指定路径下的文件,并使用 wc 命令统计行数(即文件个数)
  6 
  7 file_count=$(find "directory_path" -type f | wc -l)
  8 
  9 
 10 echo "在路径$directory_path下的文件个数是: $file_count"   

 解释一下最关键的 -type f

  • -type: 用于指定要查找的文件类型。
  • f: 表示普通文件。这包括文本文件、二进制文件等,但不包括目录、设备文件、符号链接等其他类型的文件。

find 是一个在Unix和类Unix系统中用于在目录树中查找文件和目录的强大命令。它能够根据各种条件搜索文件,并执行相应的操作。

find 命令的基本语法如下:

bash

find [起始目录] [匹配条件] [执行操作]

  • 按文件名搜索:

    find /path/to/search -name "filename"

2.

set

env

如何设置环境变量呢?

export 

4.

单引号(')

单引号用于创建字面量字符串,其中的内容被视为精确的文本。在单引号内部,特殊字符(比如变量、通配符和命令替换)通常不会被解释或扩展。例如:

echo 'Hello, $USER'

在这个例子中,$USER 不会被解释为当前用户,而是作为普通字符串输出。

双引号(")

双引号用于创建字符串,并允许解释其中的变量和特殊字符。在双引号内,变量会被替换为其值,而特殊字符会被扩展。例如

greeting="Hello, $USER";echo "$greeting" 

在这里,$USER 被解释为当前的用户名,并被替换成实际的用户名。

 在这里$USER会变成用户的名字,所以是root

反引号(`)

反引号用于执行命令替换,将命令的输出结果赋值给变量。例如:

current_date=`date` echo "今天是:$current_date"

在这个例子中,date 命令的输出被赋值给 current_date 变量。

需要注意的是,反引号在较新的Shell版本中逐渐被 $() 替代,功能相似但更易读且嵌套更方便:

5.

#!/bin/bash

directory_path="/path/to/your/directory"

# 获取目录中的所有文件
files=("$directory_path"/*)

# 删除前10个文件
for ((i=0; i<10 && i<${#files[@]}; i++)); do
    rm "${files[$i]}"
    echo "已删除文件:${files[$i]}"
done

echo "成功删除 $i 个文件。"

6.

 2 #定义存储联系人的数组
  3 contacts=()
  4 
  5 #使用while循环添加联系人
  6 while true; do
  7   read -p "请输入联系人姓名(输入exit结束) : " name
  8 
  9   if [ "$name" == "exit" ]; then
 10      break
 11   fi
 12 
 13   read -p "请输入联系人电话: " phone
 14 
 15   #将联系人信息添加到数组中
 16   contact="姓名: $name,电话: $phone"
 17   contacts+=("$contact")
 18 
 19 done
 20 
 21 echo "通讯录: "
 22 for contact in "${contacts[@]}"; do
 23     echo "$contact"
 24 done               
  1. #!/bin/bash: 这是 shebang 行,指定了脚本使用的解释器。#!/bin/bash 表示脚本将由 Bash 解释器执行。

  2. contacts=(): 这行创建了一个名为 contacts 的空数组。这是 Bash 中定义数组的方式。

  3. while true; do ... done: 这是一个无限循环的开始。while true 会一直循环执行,因为条件始终为真。循环中的命令将一直执行,直到遇到 break 为止。

  4. read -p "请输入联系人姓名(输入exit结束添加): " name: read 命令用于从标准输入读取用户输入,并将其存储在变量中。-p 选项用于在用户输入前显示提示消息。在这里,用户输入的姓名将被存储在 $name 变量中。

  5. if [ "$name" == "exit" ]; then break; fi: 这是一个条件语句,使用 if 进行条件判断。[ "$name" == "exit" ] 检查变量 $name 是否等于 "exit"。如果是,就执行 break 命令退出循环。

  6. read -p "请输入联系人电话: " phone: 类似于前面的 read 命令,用于接收用户输入的电话号码,并将其存储在 $phone 变量中。

  7. contact="姓名: $name, 电话: $phone": 这行创建了一个字符串变量 contact,其中包含联系人姓名和电话信息。这里使用了变量替换,将 $name$phone 的值嵌入到字符串中。

  8. contacts+=("$contact"): 这是将字符串 $contact 添加到数组 contacts 的语法。+= 表示追加。

  9. echo "通讯录:": echo 命令用于打印文本到标准输出。在这里,它打印了通讯录的标题。

  10. for contact in "${contacts[@]}"; do echo "$contact"; done: 这是一个 for 循环,用于遍历数组 contacts 中的每个元素。${contacts[@]} 表示整个数组。循环中的命令 echo "$contact" 打印每个联系人的信息。

 7.

#!/bin/bash

# 获取目标目录
target_directory="$1"

# 遍历输入参数中的文件,并将其复制到目标目录
for file in "${@:2}"; do
    # 检查文件是否存在
    if [ -e "$file" ]; then
        # 复制文件到目标目录
        cp "$file" "$target_directory/"
        echo "已复制文件 '$file' 到目录 '$target_directory/'"
    else
        echo "警告: 文件 '$file' 不存在,跳过该文件"
    fi
done

echo "复制完成"

./copy_files.sh /目标目录 文件1 文件2 文件3
 

8.

#!/bin/bash

# 定义包含10个城市名称的数组
cities=("城市1" "城市2" "城市3" "城市4" "城市5" "城市6" "城市7" "城市8" "城市9" "城市10")

# 遍历数组并打印每个城市名称
for city in "${cities[@]}"; do
    echo "$city"
done

 9.

该脚本动态构建一个包含从命令行参数的数量递减到 1 的数字序列的 echo 命令,并通过 eval 命令执行这个构建的 echo 命令,从而实现以逆序打印数字。

10.

#!/bin/bash

# 接收用户输入的字符串
read -p "请输入字符串: " input_string

# 接收用户输入的n和m
read -p "请输入要提取的起始位置n: " n
read -p "请输入要提取的结束位置m: " m

# 使用cut命令提取子串
result=$(echo "$input_string" | cut -c $n-$m)

# 显示提取的子串
echo "提取的子串为: $result"

cut的用法:

其中 OPTION 是一些选项,FILE 是输入文件的名称。如果没有指定文件,则 cut 从标准输入读取数据。

以下是一些常用的 cut 命令选项:

  • -c, --characters=LIST:指定要剪切的字符范围。例如,-c 1-5 表示剪切第1到第5个字符。

  • -f, --fields=LIST:指定要剪切的字段范围,字段以制表符或空格分隔。例如,-f 2,4 表示剪切第2和第4个字段。

  • -d, --delimiter=DELIM:指定字段分隔符,默认为制表符。

  • --complement:补集,表示不剪切指定的部分,而是保留其他部分。

  • --output-delimiter=STRING:指定输出时使用的分隔符。

实验题:

#!/bin/bash

# Function to draw the progress bar
drawProgressBar() {
    local progress=$1
    local total=$2
    local bar_length=50
    local filled_length=$((progress * bar_length / total))
    local empty_length=$((bar_length - filled_length))

    # Create the progress bar string
    local progress_bar=$(printf "[%s%s]" $(printf "#%.0s" $(seq 1 $filled_length)) $(printf " %.0s" $(seq 1 $empty_length)))

    # Print the progress bar
    printf "\r%s %d%%" "$progress_bar" $((progress * 100 / total))
}

# Example usage
total_steps=100

for ((i=1; i<=total_steps; i++)); do
    # Perform some task here
    sleep 0.1

    # Update the progress bar
    drawProgressBar $i $total_steps
done

# Print a newline to separate the progress bar from the next command prompt
echo

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux CentOS7 安装Docker

CentOS7安装Docker&#xff1a; Docker简介 Docker是一个开源的容器化平台&#xff0c;可帮助开发者轻松地创建、部署和运行应用程序。Docker使开发人员能够在一个独立的容器中打包应用程序及其依赖项&#xff0c;这样他们就可以轻松地将应用程序移植到任何其他环境中。Docke…

【Python】tensorflow学习的个人纪录(1)

def learn(self, s, r, s_):s, s_ s[np.newaxis, :], s_[np.newaxis, :]v_ self.sess.run(self.v, {self.s: s_})td_error, _ self.sess.run([self.td_error, self.train_op],{self.s: s, self.v_: v_, self.r: r})return td_error代码步入&#xff1a; v_ self.ses…

java后端自学错误总结

java后端自学错误总结 MessageSource国际化接口总结 MessageSource国际化接口 今天第一次使用MessageSource接口,比较意外遇到了一些坑 messageSource是spring中的转换消息接口&#xff0c;提供了国际化信息的能力。MessageSource用于解析 消息&#xff0c;并支持消息的参数化…

Ubuntu22.04无需命令行将软件更新源切换到国内

1、右上角打开设置 2、在设置中拉到最下面点击About&#xff0c;然后点击Software Updates 3、点击下拉框 4、选择other 5、找到China&#xff0c;选择一个网址&#xff0c;然后点击Choose Server 6、输入密码并回车 7、点击Close 8、点击Reload 9、等待完成即可 10、等结束之后…

frida - 3.hook类

Hook Java类 获取和修改类的字段、 hook 内部类、枚举所有加载的类。 hook内部类 要hook这个类、需要在类和内部类名之间加上$字符 采用这个分割 var innerClass = Java.use("com.luoge.com.Money.Money$innerClass")hook内部类 可以使用InnerClass.$init 来进行查…

二. BEV感知算法基础模块讲解

目录 前言0. 简述1. 基础模块补充讲解1.1 2D图像处理1.2 3D特征之点处理方案1.3 3D特征之体素处理方案 2. 从2D到3D转换模块2.1 LSS(Lift,Splat and Shoot)2.2 Pseudo LiDAR 3. 从3D到2D转换模块3.1 Explicit Mapping3.2 Implicit Mapping 4. BEV感知中的Transformer4.1 空间注…

Linux中的文件IO

文章目录 C语言文件操作系统文件I/O接口介绍 open函数返回值文件描述符fd0 & 1 & 2文件描述符的分配规则 重定向使用 dup2 系统调用 FILE理解文件系统理解硬链接软链接acm 动态库和静态库静态库与动态库生成静态库生成动态库&#xff1a; C语言文件操作 先来段代码回顾…

WebGL笔记:图形缩放的原理和实现

缩放 1 &#xff09;原理 缩放可以理解为对向量长度的改变&#xff0c;或者对向量坐标分量的同步缩放 如下图&#xff0c;比如让向量OA 收缩到点B的位置&#xff0c;也就是从OA变成OB&#xff0c;缩放了一半 2 &#xff09;公式 已知 点A的位置是(ax,ay,az)点A基于原点內缩了…

2023软件测试大赛总结

2023软件测试大赛总结 文章目录 2023软件测试大赛总结软件下载方式比赛方式个人总结断言使用java基础 预选赛省赛国赛 软件下载方式 进入官网下载插件&#xff08;直接下载一个完整的Eclipse就可以,这样比较方便&#xff09; 需要保证jdk版本和要求的一致&#xff0c;不然可能…

DNA模糊匹配(动态规划)

我做动态规划还是少的 只会做那些显而易见的动态规划题&#xff08;这题是看了给出来的解题思路做的&#xff09; 以后可能就会做与这类似的了 代码如下&#xff1a; #include<stdio.h> #include<string.h> int get_min(int a, int b, int c); int min_l[301][…

STM32串口接收不定长数据(接收中断+超时判断)

玩转 STM32 单片机&#xff0c;肯定离不开串口。串口使用一个称为串行通信协议的协议来管理数据传输&#xff0c;该协议在数据传输期间控制数据流&#xff0c;包括数据位数、波特率、校验位和停止位等。由于串口简单易用&#xff0c;在各种产品交互中都有广泛应用。 但在使用串…

4_企业架构双点服务器HA

企业架构双点服务器HA 学习目标和内容 1、能够描述高可用HA的作用 2、能够理解VIP的切换 3、能够描述keepalived作用 4、能够理解主master和备backup服务器关系 5、能够实现主备服务器高可用配置 6、能够实现模拟业务宕机服务切换 一、背景描述及其方案设计 1、业务背景描述 时…

activemq启动成功但web管理页面却无法访问

前提&#xff1a; 在linux启动activemq成功&#xff01;本地能ping通linux 处理方案&#xff1a; 确定防火墙是否关闭&#xff0c; 有两种处理方案&#xff1a;第一种-关闭防火墙&#xff1b;第二种-暴漏8161和61616两个端口 netstat -lnpt查看8161和61616端口 注意&#xf…

【算法每日一练]-图论(保姆级教程篇12 tarjan篇)#POJ3352道路建设 #POJ2553图的底部 #POJ1236校园网络 #缩点

目录 POJ3352&#xff1a;道路建设 思路&#xff1a; POJ2553&#xff1a;图的底部 思路&#xff1a; POJ1236校园网络 思路&#xff1a; 缩点&#xff1a; 思路&#xff1a; POJ3352&#xff1a;道路建设 由于道路要维修&#xff0c;维修时候来回都不能走&#xff0c;现要…

Python实战:批量加密Excel文件指南

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是彭涛&#xff0c;今天为大家分享 Python实战&#xff1a;批量加密Excel文件指南&#xff0c;全文3800字&#xff0c;阅读大约10分钟。 在日常工作中&#xff0c;保护敏感数据是至关重要的。本文将引导你通过…

跟着Nature Communications学习Hisat-Trinity-PASA等分析流程

一边学习&#xff0c;一边总结&#xff0c;一边分享&#xff01; 详细教程请访问&#xff1a; 组学分析流程 本期分析流程 Hisat2-SamtoolsTrinity_GG_denovoPASA … 本期教程文章 题目&#xff1a;Genomic insights into local adaptation and future climate-induced vu…

untiy webgl常见问题与操作

文章目录 1 untiy和网页相互通信2 打开新页面&#xff08;同标签页和新标签页&#xff09;3 获取网页的URL4 解析Url内的参数5 后处理与色彩空间问题 1 untiy和网页相互通信 看这个文章 2 打开新页面&#xff08;同标签页和新标签页&#xff09; 先看本文untiy和网页相互通信…

代码随想录算法训练营 ---第五十三天

第一题&#xff1a; 简介&#xff1a; 本题和昨天的最大重复子串问题很相似&#xff0c;只不过本题不一定是连续的。 动规五部曲分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][j]&#xff1a;长度为i-1 的字符串text1与长度为j-1的…

Git 分支详解

目录 1. Git 分支管理 2. 如何自己创建分支&#xff1f; 3. 创建分支修改内容&#xff0c;之后合并到主分支 4. 删除分支 5. 出现 merge 冲突如何解决 6. 分支策略 前言 之前只是知道有 master 分支这个东西&#xff0c;但是具体是啥意思还是不知道&#xff0c;今天详…

【面试HOT200】二叉树——广度优先搜索篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试的&#xff0c;整理期间苛求每个知识点&#xff0c;平衡理解简易度与深入程度。 &#x1f970;来源&#xff1a;材料主要源于【CodeTopHot200】进行的&#xff0c;每个知识点的修正和深入主要参…