shell命令编写

news2025/1/17 6:05:11

 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

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

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

相关文章

Wireshark 协议插件Lua开发 -数据包内嵌协议的解释

概述 因为公司项目涉及的协议打包&#xff0c;协议包内又嵌了一层IP包的奇葩套娃结构&#xff0c;为了方便抓包调试&#xff0c;利用Wireshark的协议插件开发功能&#xff0c;写了一个插件&#xff0c;博文记录以备忘。 环境信息 Wireshark 4.0.3 协议结构体套娃图 插件安装…

Prime 1.0

信息收集 存活主机探测 arp-scan -l 或者利用nmap nmap -sT --min-rate 10000 192.168.217.133 -oA ./hosts 可以看到存活主机IP地址为&#xff1a;192.168.217.134 端口探测 nmap -sT -p- 192.168.217.134 -oA ./ports UDP端口探测 详细服务等信息探测 开放端口22&#x…

轻盈悦耳的运动型气传导耳机,还有条夜跑灯,哈氪聆光体验

我平时出门不管是散步、骑行&#xff0c;还是坐公交的时候&#xff0c;都喜欢戴上耳机听音乐&#xff0c;这可以让我放松心情。现在市面上的耳机还是以真无线为主&#xff0c;选择虽多&#xff0c;但不适合户外使用&#xff0c;听不见外界的声音&#xff0c;运动时还容易脱落&a…

软件工程单选多选补充

2. 4. 5. 6. 7. 8. 9. 10. 12。 13.

软件设计模式原则(三)单一职责原则

单一职责原则&#xff08;SRP&#xff09;又称单一功能原则。它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变&#xff0c;那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原…

锁表的原因及解决办法

引言 作为开发人员&#xff0c;我们经常会和数据库打交道。 当我们对数据库进行修改操作的时候&#xff0c;例如添加字段&#xff0c;更新记录等&#xff0c;没有正确评估该表在这一时刻的使用频率&#xff0c;直接进行修改&#xff0c;致使修改操作长时间无法响应&#xff0…

【【Micro Blaze 的 最后补充 与 回顾 】】

Micro Blaze 的 最后补充 与 回顾 Micro Blaze 最小系统 以 MicroBlaze 为核心、LocalMemory&#xff08;片上存储&#xff09;为内存&#xff0c;加上传输信息使用的 UART串口就构成了嵌入式最小系统。当程序比较简单时&#xff0c;Local Memory 可以作为程序的运行空间以及…

OCR原理解析

目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…

Excel 分列功能

一. 需求 ⏹有一段文本&#xff0c;文本一共有7列。这7列文本之间的分隔符不相同 有一个空格的有多个空格的有Tab的jmw_state 和 method 之间用 & 连接 现在要求&#xff0c;将这段文本粘贴到Excel中&#xff0c;进行分列。并且需要将 jmw_state 和 method 也进行分列 也…

LASSO vs GridSearchCV

LASSO VS GridSearchCV LASSO定义目的使用方法原理示例总结 GridSearchCV定义目的使用方法原理网格搜索&#xff08;Grid Search&#xff09;交叉验证&#xff08;Cross-Validation&#xff09;总结 示例总结 总结 LASSO 定义 LASSO&#xff08;Least Absolute Shrinkage and…

机器人阻抗控制性能及其实验验证

Impedance Control 机器人阻抗控制是一种控制方法&#xff0c;其目的是构建一个系统使得执行器&#xff08;如机械臂&#xff09;能同时控制力和位置。它基于阻抗模型&#xff0c;通过调节机器人的行为&#xff0c;以维持理想的动态关系。这种动态关系可以理解为机器人末端位置…

【微信小程序】上传头像 微信小程序内接小程序客服

这里写目录标题 微信小程序上传头像使用button按钮包裹img 微信小程序内接小程序客服使用button按钮跳转客服 微信小程序上传头像 使用button按钮包裹img 原本思路是只使用image标签再加上chooseImg&#xff0c;但发现使用button标签上传头像这种方法更实用。微信小程序文档上…

钉钉聊天审计软件有哪些

钉钉在企业中的广泛应用&#xff0c;聊天审计软件也日益受到关注。这类软件主要针对企业微信、钉钉等即时通讯工具&#xff0c;对其中的聊天记录进行审计&#xff0c;以便企业能够更好地管理员工的在线行为&#xff0c;并保障信息安全。 一、聊天审计软件的作用 1、监管员工行…

Python编程技巧 – 迭代器(Iterator)

Python编程技巧 – 迭代器(Iterator) By JacksonML Iterator(迭代器)是Python语言的核心概念之一。它常常与装饰器和生成器一道被人们提及&#xff0c;也是所有Python书籍需要涉及的部分。 本文简要介绍迭代器的功能以及实际的案例&#xff0c;希望对广大读者和学生有所帮助。…

判断二叉树是否为完全二叉树

具体思路&#xff1a; 将二叉树层序遍历&#xff08;节点&#xff09;插进队列中&#xff0c;遇到空时就break&#xff08;退出循环&#xff09;&#xff0c;再重新遍历一遍&#xff0c;若空的后面又再次出现数据&#xff0c;则返回false&#xff08;不是完全二叉树&#xff0…

MySQL 8创建数据库、数据表、插入数据并且查询数据

我使用的数据库是MySQL 8。 创建数据库 create database Bookbought; -- 创建数据库Bookbought use Bookbought; -- 使用数据库Bookbought创建数据表 创建用户表bookuser。 create table ## 往allbook里边插入数据(id INT PRIMARY KEY AUTO_INCREMENT, -- id 为 主键userna…

KubeShark: Kubernetes的Wireshark

Wireshark可以帮助我们抓取并分析网络数据包&#xff0c;理解网络中发生的事情&#xff0c;那是否有工具可以帮助我们理解在K8S集群中发生的事情&#xff0c;帮助排查集群故障&#xff0c;Kubeshark就是这样的工具。原文: KubeShark: Wireshark for Kubernetes[1] 简介 Wiresha…

LLM大语言模型(一):ChatGLM3-6B试用

前言 LLM大语言模型工程化&#xff0c;在本地搭建一套开源的LLM&#xff0c;方便后续的Agent等特性的研究。 本机环境 CPU&#xff1a;AMD Ryzen 5 3600X 6-Core Processor Mem&#xff1a;32GB GPU&#xff1a;RTX 4060Ti 16G ChatGLM3代码库下载 # 下载代码库 ​git c…

使用求2个字符串最短编辑距离动态规划算法实现 git diff 算法 java 实现

测试类 MyDiffTest.java&#xff1a; import java.io.BufferedReader; import java.io.FileReader; import java.util.ArrayList; import java.util.List;public class MyDiffTest {private static String path "\\xxx\\";private static List<String> lines…

java操作windows系统功能案例(三)

以下是一些 Java 操作 Windows 系统功能的案例&#xff1a; 打开 Windows 计算器 public class Calculator {public static void main(String[] args) throws Exception {Runtime.getRuntime().exec("calc.exe");} }打开 Windows 默认浏览器 public class Browser…