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

linux系统编程中Shell脚本配置,及linux脚本中的man test

Shell脚本配置是指在脚本中设置各种参数、选项和环境,以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。

1. 脚本开头的配置

Shebang 
第一行通常是shebang,它告诉系统使用哪个解释器来执行脚本。例如:
#!/bin/bash
这行代码指示系统使用Bash解释器来运行脚本。

注释
注释用于解释脚本的功能或配置:
#!/bin/bash

# This script performs a backup of the specified directory

2. 变量和常量

定义变量
变量用来存储数据,定义时不需要指定类型:
directory="/path/to/directory"
filename="backup_$(date +%F).tar.gz"

只读变量
使用`readonly`标记变量为只读,防止被修改:
readonly MAX_RETRIES=5

环境变量
设置环境变量以影响脚本的运行环境:
export PATH="/usr/local/bin:$PATH"

3. 配置选项

脚本参数
脚本可以接受命令行参数,使用`$1`, `$2`, ... 来引用这些参数:
#!/bin/bash

input_file="$1"
output_file="$2"

if [ -z "$input_file" ] || [ -z "$output_file" ]; then
    echo "Usage: $0 <input_file> <output_file>"
    exit 1
fi

# 脚本主体

选项处理
可以使用`getopts`来解析命令行选项:
#!/bin/bash

while getopts "d:f:" opt; do
    case $opt in
        d) directory="$OPTARG" ;;
        f) file="$OPTARG" ;;
        *) echo "Usage: $0 [-d directory] [-f file]" ;;
    esac
done

4. 配置文件

使用配置文件
将配置选项存储在外部文件中,并在脚本中读取:
#!/bin/bash

# 读取配置文件
source /path/to/config.conf

# 使用配置参数
echo "Directory is $directory"
echo "Filename is $filename"

配置文件示例 (`config.conf`)
directory="/path/to/directory"
filename="backup_$(date +%F).tar.gz"

5. 错误处理和调试

错误处理 
处理命令的返回值以确保脚本的健壮性:
#!/bin/bash

cp "$source_file" "$destination"
if [ $? -ne 0 ]; then
    echo "Error: Failed to copy file"
    exit 1
fi

调试 
使用`set -x`来显示命令执行过程,有助于调试:


#!/bin/bash

set -x  # 开始调试
echo "Starting the script"
# 你的脚本内容
set +x  # 结束调试

设置严格模式  
使用`set -e`、`set -u` 和 `set -o pipefail`来提高脚本的健壮性:
#!/bin/bash

set -euo pipefail

# 脚本内容
- set -e:遇到错误时退出脚本。
- set -u:使用未初始化的变量时退出脚本。
- set -o pipefail:管道中任何命令失败时退出脚本。

6. 日志记录

输出日志  
将脚本的输出和错误记录到日志文件中:

#!/bin/bash

log_file="/path/to/logfile.log"

exec > >(tee -a "$log_file") 2>&1

echo "Starting script"
# 脚本内容

这里使用了`exec`来重定向标准输出和标准错误到日志文件中,并使用`tee`来将日志同时输出到终端和文件中。

7. 定时任务

使用Cron定时执行脚本
编辑crontab文件来定期运行脚本:


crontab -e


添加定时任务,例如每天凌晨1点运行脚本:

0 1 * * * /path/to/script.sh
 

示例脚本

以下是一个配置化的Shell脚本示例,它包括了参数处理、错误处理、日志记录等功能:


#!/bin/bash

# 配置
log_file="/var/log/myscript.log"
source_dir="/path/to/source"
backup_dir="/path/to/backup"
timestamp=$(date +"%Y-%m-%d_%H-%M-%S")

# 处理输入参数
while getopts "s:b:" opt; do
    case $opt in
        s) source_dir="$OPTARG" ;;
        b) backup_dir="$OPTARG" ;;
        *) echo "Usage: $0 [-s source_dir] [-b backup_dir]" ;;
    esac
done

# 记录日志
exec > >(tee -a "$log_file") 2>&1

echo "Starting backup at $timestamp"

# 执行备份
tar -czf "$backup_dir/backup_$timestamp.tar.gz" "$source_dir"
if [ $? -ne 0 ]; then
    echo "Backup failed"
    exit 1
else
    echo "Backup successful"
fi

在Linux中,`man test` 指的是查看 `test` 命令的手册页。`test` 是一个用于在Shell脚本中执行条件测试的命令,通常用于判断文件属性或比较值。这个命令也可以用 `[` 和 `]` 替代,这两个符号通常用作条件判断。

`test` 命令简介

`test` 命令用于检查文件属性、字符串和整数等条件,并返回一个退出状态码。它的退出状态码(通常是 `$?`)用于指示测试结果:返回 `0` 表示测试条件为真(true),返回 `1` 表示测试条件为假(false)。

基本语法


test EXPRESSION
 

或者使用 `[` 和 `]` 作为替代:


[ EXPRESSION ]
 

常用测试选项

1. 文件测试

- `-e FILE`: 检查文件是否存在。
- `-f FILE`: 检查文件是否存在且为普通文件。
- `-d FILE`: 检查文件是否存在且为目录。
- `-r FILE`: 检查文件是否存在且可读。
- `-w FILE`: 检查文件是否存在且可写。
- `-x FILE`: 检查文件是否存在且可执行。

示例:


if [ -f "/path/to/file" ]; then
    echo "File exists and is a regular file."
else
    echo "File does not exist or is not a regular file."
fi
 

2. 字符串测试

- `-z STRING`: 检查字符串是否为空。
- `-n STRING`: 检查字符串是否非空。
- `STRING1 = STRING2`: 检查两个字符串是否相等。
- `STRING1 != STRING2`: 检查两个字符串是否不相等。

示例:


if [ -z "$var" ]; then
    echo "Variable is empty."
else
    echo "Variable is not empty."
fi
 

3. 整数比较

- `INT1 -eq INT2`: 检查两个整数是否相等。
- `INT1 -ne INT2`: 检查两个整数是否不相等。
- `INT1 -lt INT2`: 检查第一个整数是否小于第二个整数。
- `INT1 -le INT2`: 检查第一个整数是否小于或等于第二个整数。
- `INT1 -gt INT2`: 检查第一个整数是否大于第二个整数。
- `INT1 -ge INT2`: 检查第一个整数是否大于或等于第二个整数。

示例:
a=5
b=10
if [ $a -lt $b ]; then
    echo "$a is less than $b."
else
    echo "$a is not less than $b."
fi

手册页 (`man test`)

你可以使用 `man test` 命令查看 `test` 命令的详细手册页。手册页会包含所有支持的选项和用法示例。要查看手册页,请在终端中运行:
man test

示例脚本

以下是一个使用 `test` 命令的完整Shell脚本示例,用于检查文件属性和变量值:
#!/bin/bash

file="/path/to/file"
var="Hello"

# 检查文件是否存在且为普通文件
if [ -f "$file" ]; then
    echo "File exists and is a regular file."
else
    echo "File does not exist or is not a regular file."
fi

# 检查变量是否为空
if [ -z "$var" ]; then
    echo "Variable is empty."
else
    echo "Variable is not empty."
fi

# 比较两个整数
a=5
b=10
if [ $a -lt $b ]; then
    echo "$a is less than $b."
else
    echo "$a is not less than $b."
fi

在编写Shell脚本时,`test` 命令是一个非常有用的工具,用于条件判断和逻辑控制。

相关文章:

linux系统编程中Shell脚本配置,及linux脚本中的man test

Shell脚本配置是指在脚本中设置各种参数、选项和环境&#xff0c;以确保脚本能够根据预期的需求和环境执行。配置可以包括变量设置、环境变量、命令选项和错误处理等。 1. 脚本开头的配置 Shebang 第一行通常是shebang&#xff0c;它告诉系统使用哪个解释器来执行脚本。例如…...

Win7虚拟机分享(已安装VMware Tools)

前言 之前写过VMware安装Win7并安装VMware tools的博客&#xff0c;但操作仍显繁琐。后来发现可以直接分享已经配置好的虚拟机&#xff0c;所有软件都是安装好的&#xff0c;解压即用。 一. VMware Win7虚拟机配置 已完成的配置和安装的软件 专业版Win7系统(已永久激活)VMware…...

CANOpen EMCY紧急报文介绍

什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时&#xff0c;向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时&#xff0c;就可以发送紧急报文。 紧急报文的格式 错误代码&#xff1a;是0x1003索引预定义错误字段的内容&#xff…...

JAVA项目

目录 一、前言 二、技术介绍 三、项目实现流程 四、论文流程参考 五、核心代码截图 专注于大学生实战开发、讲解和毕业答疑等辅导&#xff0c;获取源码后台 一、前言 在数字化音乐时代&#xff0c;个性化推荐已成为提升用户体验、促进音乐消费的重要手段。为此&#xff0…...

️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)

引言&#xff1a;种下一棵树最好的时间是十年前,其次是现在 书接上回&#xff1a;将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的&#xff1a;在这个大模型横行的时候&#xff0c;我们常用电脑如何开展大模型的工作…...

Kafka实战(Scala操作)

Kafka基础讲解部分 Kafka基础讲解部分 Kafka实战&#xff08;Scala操作&#xff09; 1、引入依赖 版本&#xff1a; <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.report…...

Android Framework 之WMS详解

1.WMS说的就是 WindowManagerService&#xff1a;负责为Activity对应的窗口分配Surface&#xff0c;管理Surface的显示顺序以及位置尺寸&#xff0c;控制窗口动画 。 它是Android系统中为各个客户端即每个app来提供这样的服务的一个类。 在Android系统中在systemServer 进程和各…...

opencv-图像仿射变换

仿射变换设计图像位置角度的变化&#xff0c;是深度学习预处理中常用的功能。仿射变换就是对图像的平移缩放旋转翻转操作的组合 如下图&#xff0c;对图中点1,2,3与图二中三个点一一映射&#xff0c;仍然形成三角形&#xff0c;但形状已经发生改变&#xff0c;通过这两组三点求…...

算法的基本概念

一、算法的基本概念思维导图 二、什么是算法&#xff1a; 1.我们知道数据结构就是将我门现实的世界中的问题数据化&#xff0c;存入计算机中&#xff0c;并实现对数据结构的一些基本操作。 2.算法就是如何处理这些存入计算机中的信息&#xff0c;以求高效的解决实际问题。 3…...

124. Go Template应用实例:用代码生成代码

文章目录 生成器模式生成器代码生成 本文用生成器模式作为例子&#xff0c;来演示如何用代码生成代码。 生成器模式 熟悉 Java 开发的同学都知道&#xff0c;lombok 有一个著名的注解 Builder &#xff0c;只要加在类上面&#xff0c;就可以自动生成 Builder 模式的代码。如下…...

【AI实践】阿里云方言文本转语音TTS

最近要做一些普通话和方言demo 找一个免费工具 免费在线文字转语音工具 | edge-tts 在线体验 (bingal.com) 还有一些方言在阿里云上找了下&#xff0c;基于官方demo改了一下 阿里云语音合成接口说明_智能语音交互(ISI)-阿里云帮助中心 (aliyun.com) 如何下载安装、使用语音…...

java 之 各类日期格式转换

一、前言 大家在开发过程中必不可少得和日期打交道&#xff0c;对接别的系统时&#xff0c;时间日期格式不一致&#xff0c;每次都要转换! 从 Java1 到 Java8 将近 20 年&#xff0c;再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时…...

Nvidia黄仁勋对话Meta扎克伯格:AI和下一代计算平台的未来 | SIGGRAPH 2024对谈回顾

在今年的SIGGRAPH图形大会上&#xff0c;Nvidia创始人兼CEO黄仁勋与Meta创始人马克扎克伯格进行了一场长达60分钟的对谈。这场对话不仅讨论了AI的未来发展和Meta的开源哲学&#xff0c;还发布了不少新产品&#xff0c;并深入探讨了下一代计算平台的可能性。 引言 人工智能的发…...

【JAVA设计模式】适配器模式——类适配器模式详解与案例分析

前言 在软件设计中&#xff0c;适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在使不兼容的接口能够协同工作。它通过引入一个适配器类&#xff0c;帮助两个接口之间进行适配&#xff0c;使得它们能够互相操作。本文将详细介绍适配器模…...

【Vue】全局组件和局部组件

一、全局组件 定义&#xff1a; 全局组件是在整个Vue应用中都可以使用的组件。它们被注册在Vue的根实例上&#xff0c;因此可以在任何子组件的模板中被引用&#xff0c;而无需在每个组件中重复注册。 注册方式&#xff1a; 全局组件通过Vue.component方法进行注册。这个方法接…...

react引入高德地图并初始化卫星地图

react引入高德地图并初始化卫星地图 1.安装依赖 yarn add react-amap amap/amap-jsapi-loader2.初始化地图 import AMapLoader from "amap/amap-jsapi-loader"; import { FC, useEffect, useRef, useState } from "react";const HomeRight () > {con…...

2024最简七步完成 将本地项目提交到github仓库方法

2024最简七步完成 将本地项目提交到github仓库方法 文章目录 2024最简七步完成 将本地项目提交到github仓库方法一、前言二、具体步骤1、github仓库创建2、将远程仓库拉取并合并&#xff08;1&#xff09;初始化本地仓库&#xff08;2&#xff09;本地仓库与Github仓库关联&…...

前端WebSocket入门,看这篇就够啦!!

在HTML5 的早期开发过程中&#xff0c;由于意识到现有的 HTTP 协议在实时通信方面的不足&#xff0c;开发者开始探索能够在 Web 环境下实现双向实时通信的新的通信协议&#xff0c;提出了 WebSocket 协议的概念。 一、什么是 WebSocket&#xff1f; WebSocket 是一种在单个 T…...

漏洞复现-F6-11泛微-E-Cology-SQL

本文来自无问社区&#xff0c;更多漏洞信息可前往查看http://www.wwlib.cn/index.php/artread/artid/15575.html 0x01 产品简介 泛微协同管理应用平台e-cology是一套企业级大型协同管理平台 0x02 漏洞概述 该漏洞是由于泛微e-cology未对用户的输入进行有效的过滤&#xff0…...

Turbo Boost 禁用

最近在做OAI NR的时候关闭CPU 睿频的时候出了一些问题&#xff0c;这里我把我找到的资料记录一下&#xff1a; 禁用 Turbo Boost 的过程可能会因不同的 BIOS/UEFI 和操作系统设置而有所不同。以下是一些可能的原因及解决方法&#xff1a; 可能的原因 BIOS/UEFI 设置问题: 你的…...

假期BUUCTF小练习3

文章目录 [极客大挑战 2019]BuyFlag[BJDCTF2020]Easy MD5[HCTF 2018]admin第一种方法 直接登录第二种方法 flack session伪造第三种方法Unicode欺骗 [MRCTF2020]你传你&#x1f40e;呢[护网杯 2018]easy_tornadoSSTI注入 [ZJCTF 2019]NiZhuanSiWei [极客大挑战 2019]BuyFlag 一…...

【ubuntu系统】在虚拟机内安装Ubuntu

Ubuntu系统装机 描述新装机后的常规配置&#xff0c; 虚拟机使用vbox terminal 打不开 CTRL ALT F3 进入命令行模式&#xff08;需要返回桌面时CTRL ALT F1&#xff09;root用户登入cd /etc/default vi locale LANG“en_US” 改成 LANG“en_US.UTF-8”保存修改后&…...

Python初学者必须掌握的基础知识点

Python初学者必须掌握的基础知识点包括数据类型与变量、控制结构&#xff08;条件语句和循环语句&#xff09;、基本数据结构&#xff08;列表、元组、字典、集合&#xff09;、函数与模块、以及字符串处理等。以下是对这些基础知识点及其对应代码的详细介绍&#xff1a; 1. …...

ESP32是什么?

ESP32是一款由乐鑫信息科技&#xff08;Espressif Systems&#xff09;推出的高度集成的低功耗系统级芯片&#xff08;SoC&#xff09;&#xff0c;它结合了双核处理器、无线通信、低功耗特性和丰富的外设&#xff0c;特别适用于各种物联网&#xff08;IoT&#xff09;应用。以…...

jemalloc分析内存

分析内存泄漏过程中&#xff0c; 由于tcmalloc不能长时间开启heap profile&#xff08;会不停涨内存&#xff0c;导致内存爆掉&#xff09;.尝试换jemalloc. 交叉编译&#xff1a; git clone https://github.com/jemalloc/jemalloc.git./autogen.sh./configure --hostaarch64-…...

【QT】qss

目录 基本语法 设置全局样式 问题 分离样式代码 方案1 方案2 选择器 概况 子控件选择器 伪类选择器 盒子模型 修改控件样式示例 按钮 属性小结 复选框 属性小结 输入框 属性小结 列表框 属性小结 渐变色 示例&#xff1a; 菜单栏 设置菜单栏的背景…...

Java处理大数据的技巧

大数据处理是现代计算机科学中的一个重要领域&#xff0c;通过高效的算法和工具&#xff0c;我们可以从大量数据中提取有价值的信息。本文将介绍一些处理大数据的技巧和策略&#xff0c;并讨论如何通过Java与MySQL实现高效的大数据处理。 一、什么是大数据处理&#xff1f; 大…...

JavaScript基础——JavaScript常见语句(判断语句、循环语句、控制流语句)

JavaScript提供了丰富的语句来控制程序的执行流程&#xff0c;包括用于条件判断的if、switch和三元运算符&#xff0c;以及用于循环的for、while、do...while、for...in和for...of。此外&#xff0c;还有控制流语句如break、continue和return。 判断语句 if 语句 if 语句&…...

材质球向shader传值失败

unity中导入spine模型&#xff0c;当模型挂载SkeletonMecanim组件后&#xff0c;发现材质球向shader传值失败&#xff0c;改为SetPropertyBlock后可行。 //spine模型使用材质球传参数&#xff0c;当spine模型上挂载有SkeletonMecanim的情况下&#xff0c;会传值失败!!!!// for…...

【TDH社区版大事件】图分析、全文检索、小文件治理、数据开发工具通通都有!

星环科技大数据基础平台TDH社区版&#xff0c;在保留了商业版核心技术优势的基础上最大程度地降低了用户使用大数据技术的门槛与成本&#xff0c;具有更轻量、更简单、更易用等特性。 此次TDH社区开发版、社区版、社区订阅版均发布了新版本&#xff0c;带来新的产品组件和新的…...

网站建设技术团队有多重要/重庆关键词搜索排名

第 1 页 共 13 页 六种主流编程语言&#xff08; C 、 C 、 Python 、 JavaScript 、 PHP 、 Java &#xff09;特性对比 时间 2014-02-24 09:17:54 CSDN 博客 原文 http://blog.csdn.net/weiganyi/article/details/19805989 这些年来我陆陆续续已经学习了六种编程语言&#xf…...

做神马网站优化排/2023年东莞疫情最新消息

PHP array_values() 函数用来获得数组中所有元素的值&#xff0c;语法如下&#xff1a;array array_values ( array $arr )参数 arr 表示被操作的数组。返回值&#xff1a;以索引数组的形式返回 arr 中所有元素的值。使用示例如下&#xff1a;//键值数组$info array(name >…...

做通路富集分析的网站/cba最新消息

问题描述&#xff1a;客户端连接数据库报错,ORA-12516: TNS: 监听程序无法找到匹配协议栈的可用句柄 解决过程&#xff1a;1。查看当前会话数、processes和sessions值&#xff0c;发现session数和2个参数的值已经非常逼近SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 …...

时时彩网站建设教程/东莞百度快照优化排名

备个份 最后生成的安装包exe获取位置在&#xff1a;...

网站推广优化的公司/免费的推广引流软件

前言 Hi~&#xff0c;我是 2020 届物联网专业毕业生&#xff0c;现就读于杭州。谨以此文来记录我的秋招以及入门前端以来的学习历程&#xff0c;如有错误&#xff0c;希望大家能及时提出&#xff01; 面试情况 前前后后一共面试了 14 家公司的前端岗&#xff0c;按城市划分为&…...

网站怎么做一次性链接/中山360推广

什么是MIME TypeMIME Type是用于描述文件的类型的一种表述方法&#xff0c;其将文件划分为多种类型&#xff0c;方便对其进行统一的管理。MIME Type指定了文件的类型名称、描述、图标信息&#xff0c;同时通过与.desktop应用程序描述文件整合&#xff0c;指定了文件的打开方式。…...