Advanced Bash-Shell Guide(Version 10) 学习笔记三

书上的脚本比较多 记录比较有用的脚本

更好的方式检查命令行参数是否为数字

40 # E_WRONGARGS=85 # Non-numerical argument (bad argument format).
41 #
42 # case "$1" in
43 # "" ) lines=50;;
44 # *[!0-9]*) echo "Usage: `basename $0` lines-to-cleanup";
45 # exit $E_WRONGARGS;;
46 # * ) lines=$1;;
47 # esac

更好的方式检查命令行参数数量是否正确

1 E_WRONG_ARGS=85
2 script_parameters="-a -h -m -z"
3 # -a = all, -h = help, etc.
4
5 if [ $# -ne $Number_of_expected_args ]
6 then
7 echo "Usage: `basename $0` $script_parameters"
8 # `basename $0` is the script‘s filename.
9 exit $E_WRONG_ARGS
10 fi

更好的方式检查是否在正确的目录

63 # cd /var/log || {
64 # echo "Cannot change to necessary directory." >&2
65 # exit $E_XCD;
66 # }

备份源目录的文件并且在目标目录解压

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xpvf -)
一个更加有效的脚本是
cd source/directory
# tar cf - . | (cd ../dest/directory; tar xpvf -)
或
cp -a /source/directory/* /dest/directory
# cp -a /source/directory/* /source/directory/.[^.]* /dest/directory 
#这个复制源目录的隐藏文件

备份最近24小时内改变的文件

#!/bin/bash

BACKUPFILE=backup-$(date +%m-%d-%Y)
archive=${1:-$BACKUPFILE}
# 如果在命令行中没有指定参数,就是用如下的格式
# it will default to "backup-MM-DD-YYYY.tar.gz."

tar cvf - `find . -mtime -1 -type f -print` > $archive.tar
gzip $archive.tar
echo "Directory $PWD backed up in archive file \"$archive.tar.gz\"."

如果文件太多或者文件名有空白字符,上面的脚本可能出错

更好的备份方案   tar -r 追加到归档文件

# -------------------------------------------------------------------
# find . -mtime -1 -type f -print0 | xargs -0 tar rvf "$archive.tar"
或
# find . -mtime -1 -type f -exec tar rvf "$archive.tar" ‘{}‘ \;
exit 0

获取命令行参数的最后一个参数

args=$# # Number of args passed.
lastarg=${!args}
# Note: This is an *indirect reference* to $args ...
# Or: lastarg=${!#}

${file#*/} :拿掉第一条 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/} :拿掉最后一条 / 及其左边的字符串:my.file.txt
${file#*.} :拿掉第一个 . 及其左边的字符串:file.txt
${file##*.} :拿掉最后一个 . 及其左边的字符串:txt
${file%/*} :拿掉最后条 / 及其右边的字符串:/dir1/dir2/dir3
${file%%/*} :拿掉第一条 / 及其右边的字符串:(空值)
${file%.*} :拿掉最后一个 . 及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*} :拿掉第一个 . 及其右边的字符串:/dir1/dir2/dir3/my

时间: 2024-10-14 09:12:45

Advanced Bash-Shell Guide(Version 10) 学习笔记三的相关文章

Advanced Bash-Shell Guide(Version 10) 学习笔记一

我喜欢的一句话the only way to really learn scripting is to write scripts 学习脚本的唯一方法就是写脚本 更好的命令行参数检测    E_WRONGARGS=85 # Non-numerical argument (bad argument format).    41 #    42 # case "$1" in    43 # "" ) lines=50;;    44 # *[!0-9]*) echo &

Advanced Bash-Shell Guide(Version 10) 学习笔记二

变量替换$variable 是 ${variable}的简写    39 hello="A B C D"    40 echo $hello # A B C D    41 echo "$hello" # A B C D    引号保留变量里面的空白        1 echo "$uninitialized" # (blank line)    2 let "uninitialized += 5" # Add 5 to it

shell编程教程or学习笔记

----------------------------------------------------hello world------------------------------------------- linux 创建如下文件 vim hello #! /bin/bash   //告诉Shell 使用哪个Shell 程序 #Display  a line    //#表示注释 //空白行用来区分不同更功能 没有实际意义 name="[email protected]" ec

angular学习笔记(三十)-指令(10)-require和controller

本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐directive> <inner‐directive></inner‐directive> </outer‐directive> 这里有两个指令,一个outer-directive指令元素,它里面又有一个inner-directive指令元素. js: app.directiv

lucene学习笔记(三)

好几天没更新了.更新一下,方便自己和大家学习. 这是最基本的代码 package index; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document;

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

Ninject学习笔记&lt;三&gt;

ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开源框架有很多,本篇的主题只有一个,就是让阅读过本篇幅的朋友逗知道IoC框架在项目中的作用,以及它的重要性. 这样做的目的是以便在以后的学习工作中选择自己中意的一个IoC框架来学习.使用,或者是自己去实现一个.好了,不废话了. 2.环境准备 1.新建个4.0Framework的一个控制台应用程序项目,

OpenCV for Python 学习笔记 三

给源图像增加边界 cv2.copyMakeBorder(src,top, bottom, left, right ,borderType,value) src:源图像 top,bottem,left,right: 分别表示四个方向上边界的长度 borderType: 边界的类型 有以下几种: BORDER_REFLICATE # 直接用边界的颜色填充, aaaaaa | abcdefg | gggg BORDER_REFLECT # 倒映,abcdefg | gfedcbamn | nmabcd

NFC学习笔记——三(在windows操作系统上安装libnfc)

本篇翻译文章: 这篇文章主要是说明如何在windows操作系统上安装.配置和使用libnfc. 一.基本信息 1.操作系统: Windows Vista Home Premium SP 2 2.硬件信息: System: Dell Inspiron 1720 Processor: Intel Core 2 Duo CPU T9300 @ 2.5GHz 2.5GHz System type: 32-bit Operating System 3.所需软件: 在windows操作系统上安装软件需要下列