Linux Shell脚本攻略 读书笔记

Linux Shell脚本攻略 读书笔记

这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝;最有价值的当属文本处理,对这块我单独整理出来一篇blog,详见《Linux Shell文本处理工具集锦》下面是文本处理之外的简单介绍,如果你觉得自己的shell需要充充电,强烈建议读读这本《linux Shell脚本攻略》。

嗨,Echo一下

从 echo开始:带引号的 echo和不带引号的 echo区别:使用带引号时,bash 不会对单引号中的变量进行求值,而是原样输出;而使用双引号,或者不使用引号,则会对变量进行解析:

echo ‘$var’ // $varecho $var // 5echo “$var” // 5对比printf 的格式化输出printf “%-5s %-10s %-4s” NO NAME HELLO //左对齐 宽度为 5 10 4具体的值使用右边引号外的;

对比 python中的输出:printf ” %s ” % “hello”

让echo支持转义字符:-e

[/home/weber#]echo -e ‘1\t2’1 2给终端来点颜色

在终端彩色输出:

echo -e ‘\e[1;31m this is red text\e[0m’this is red text

更有用的是为我们提示符着色:vi .profile添加:export PS1='[[\e[34;1m]$PWD#\e[0m]’

注意环境变量的赋值错误var=value //赋值操作 echo $varvar = value //判断相等操作

[/home/weber#]var=5[/home/weber#]echo ‘this is $var’this is $var[/home/weber#]echo “this is $var”this is 5

获取变量值的长度:

length=${#var} //语法真诡异打印程序的退出状态: echo $?对.bashrc 修改的简便方法: echo ‘a=/abc/’ >> ~/.bashrc为rm打造回收站功能: alias rm=’cp $@ ~/backup; rm $@’ shell的控制结构

条件判断

if condition;thencommands;elif condition;thencommandselsecommandsfi

循环结构

for var in list;docommands;done

list可以是字符串或是序列;echo {1..50} 生成列表echo {a..z}

更亲切的for循环(类C)

for((int i = 0 ; i < 10 ;i++)){commands;}

while循环

while conditiondocommands;done算术比较

语法if[ $var -eq 0 ] && action;-gt :大于-lt: 小于-ge: 大于等于-le: 小于等于-a: 逻辑与-o: 逻辑或

字符串的比较,最好使用双中括号[[ $str1 == $str2 ]][[ $str != $str ]]支持 > 、 <判空:-z 非空: -n

if更友好:if [[ -n $str ]] && [[ -z $str2 ]];thencommands;fi

避免if语句过长[ condition ] && action ;//condition为真,则执行action[ condition ] && action; // condition 为假,则执行aciton注意:condition 和[ ] 之间必须有空格,否则报错;

目录操作

创建长路径目录:

mkdir -p colin/soft/redis/

粘滞位和setuid:

chmod a+t file_dir/

设置了粘滞位,只有目录的所有者才有权限删除该目录

让所有用户都有权限执行文件:

chown root.root filechmod +s file

设置setuid文件权限后,它运行其它用户以文件所有者身份来执行文件;tips:只有linux 的elf二进制文件才可设置这个文件权限;

文件写保护

chattr +i file //文件不可修改、不可删除

touch的妙用touch可用来生成空白文件;如果文件存在,则更新时间戳;eg:批量生成100个空白文件

for name in test{0..100}.txtdotouch $namedone

只列出目录的方法

切换目录快速定位压入并切换: pushd /var/www dirs: 显示当前路径栈选择路径回切(通过索引编号): pushd +3移除最近压入栈的路径并切换到下一个目录: popd网站下载

wget url:直接下载文件或者网页;–limit-rate :下载限速,别太快-o:指定日志文件;输出都写入日志;-c:断点续传

wget -c ftpUrl下载整个站点所有页面wget –mirror me115.com

或者:

wget -r -N -l DEPTH me115.com

-l:指定页面层级的深度;-N:允许对文件使用时间戳;

格式化文本形式下载网页lynx -dump URL > web.txt

-dump选项将网页已ASCII字符形式下载到文本文件中;

更多

如果需要更丰富的下载功能,考虑使用curl;其支持多种协议,还支持POSF、cookie、认证、用户代理字符串等特性;如果你想将网页处理流程自动化,cURL是很好的选择;

tar 归档工具

归档:

tar -cvf output.tar dir/

-c:创建规定-f:指定文件名-v:在归档或解开时显示更多的详细信息

-r:追加文件到归档中:

tar -rvf output.tar dir2/

-t:显示归档内容;

tar -tf output.tar

提取归档文件:

tar -xvf output.tar

归档时排序版本控制目录(svn、cvs、git等目录信息):

tar –exclude-vcs -czvf source_code.tar.gz source/rsync 备份系统快照rsync -av source_path destination_path

-a:表示归档;-v:归档时显示详细信息-z:指定在网络传输时使用数据压缩;路径可以是远程路径:eg:rsync -avz source_dir usrname@host:path;(如果不希望使用交互式的密码输入,可使用SSH密钥来实现)

注:source_dir末尾如果使用路径/,那么rsync会将source_dir目录中的所有内容复制到目的端;如果没有带/,,则会将source_dir本身复制到目的端;

备份时排除部分文件:

rsync -avz /home/code /mnt/disk/bakup –exclude “*.txt”

可使用一个列表文件指定需要排除的的文件:–exclude-from FILEPATH

ftp自动传输一定要成为你工作最大的资产。

Linux Shell脚本攻略 读书笔记

相关文章:

你感兴趣的文章:

标签云: