记一个简单的保护if 的sh脚本

本文分享了一段在 Linux shell 脚本中使用 if 语句的经验教训,包括语法细节如方括号而非圆括号、then 前后的换行要求、return 与 exit 的区别等。

 

真是坑爹,就下面的sh,竟然也写了很久!

 

if [ `pwd` != '/usr/xx/bin/tomcat' ] 
    then
        echo "rstall is not allowed in current dir : `pwd` !"
        return
fi

./bin/rstmst.sh;../tomcat-bb/bin/rstns.sh

 

if 的语法真麻烦, linux if 的语法真是服了!

if 后面跟的是 [] ,  而不是 ()  擦!

if 和 then 之间必须换行! ———— 这哪里有写??  这我怎么想得到?

return不能用exit代替,否则退出shell。。。

 

 

then 和 具体语句之间也必须换行!

结尾是fi !

 

<think>嗯,用户想在Ubuntu系统中编写一个用于复制文件的Shell脚本。我需要先理解他的需求。他可能是一个刚开始学习Shell脚本的新手,想要一个简单的例子来复制文件。可能需要基本的脚本结构和常用的命令。首先,我应该提供一个简单脚本示例,使用cp命令。比如,创建一个名为copy.sh脚本,里面包含cp命令。这样用户能马上看到效果。然后,可能需要解释每个部分的作用,比如#!/bin/bash的作用,如何赋予执行权限,以及如何运行脚本。 接下来,用户可能需要更多的功能,比如检查源文件是否存在,或者处理多个文件的情况。这时候可以展示如何添加条件判断,使用if语句和-f参数来检查文件是否存在。这样脚本会更健壮,避免错误。然后,用户可能有批量复制文件的需求。这时候可以引入循环结构,比如for循环,遍历多个文件,并逐一复制。这样用户能学会处理多个文件的情况,提高脚本的实用性。 另外,用户可能需要保留文件属性,比如时间戳、权限等。这时候可以介绍cp命令的-p选项,说明其作用,并给出示例。这有助于用户了解如何保持文件属性一致。 最后,应该考虑用户可能遇到的常见问题,比如如何处理带空格的文件名,这时候需要引用变量时加上双引号,避免解析错误。同时,可以提示用户使用rsync命令进行更复杂的复制操作,比如增量备份,这扩展了脚本的应用场景。 在生成相关问题的时候,需要覆盖用户可能进一步探索的方向,比如错误处理、参数传递、进度显示、日志录和排除特定文件。这些问题能引导用户深入学习Shell脚本的不同方面,满足不同的需求。还要确保回答符合系统级指令,比如正确使用LaTeX格式,虽然在这个问题中可能用不到数学公式,但要注意其他格式要求。引用部分需要自然添加,但根据用户的问题,可能不需要引用外部资料,主要依靠示例和解释。 总之,回答需要结构清晰,逐步引导用户从简单到复杂,覆盖基本操作和常见问题,同时提供扩展学习的相关问题,帮助用户全面掌握Shell脚本复制文件的技巧。</think>### Shell脚本文件复制示例 以下是Ubuntu系统中使用Shell脚本复制文件的完整实现步骤: 1. **基础文件复制脚本** ```bash #!/bin/bash # 基础文件复制示例 cp /path/to/source/file.txt /path/to/destination/ ``` *执行方式*:保存为`copy.sh`,使用`chmod +x copy.sh`添加执行权限,运行`./copy.sh` 2. **带参数校验的增强版** ```bash #!/bin/bash # 带参数校验的文件复制 if [ $# -ne 2 ]; then echo "用法: $0 <源文件> <目标路径>" exit 1 fi if [ ! -f "$1" ]; then echo "错误:源文件 $1 不存在" exit 2 fi cp -v "$1" "$2" ``` *功能说明*: - 检查参数数量 - 验证源文件存在性 - 使用`-v`参数显示操作详情 3. **批量复制脚本** ```bash #!/bin/bash # 批量文件复制示例 SOURCE_DIR="/data/source" DEST_DIR="/backup" FILE_PATTERN="*.log" for file in $SOURCE_DIR/$FILE_PATTERN do if [ -f "$file" ]; then cp -p "$file" "$DEST_DIR" fi done ``` *关键特性*: - 使用`-p`保留文件属性 - 支持通配符模式匹配 - 循环处理多个文件 4. **带进度显示的版本** ```bash #!/bin/bash # 带进度显示的复制 rsync -ah --progress /source/path/ /destination/path/ ``` *优势*: - 显示实时传输进度 - 保持文件权限和时间戳 - 支持断点续传 **注意事项**: 1. 处理含空格文件名时需加双引号:`cp "$file" "$dest"` 2. 目录复制使用`-r`参数:`cp -r dir1 dir2` 3. 覆盖前确认使用`-i`:`cp -i file1 file2`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值