Linux Shell Scripting Cookbook 学习记录1

之前在看abs-guide,觉得太详细了,手头这本Linux Shell Scripting Cookbook,200页出头,例子很多,准备用一周到两周的时间看完。

已经看了四天,勉强看到第四章,既懒又困,严重拖延进度。

明显感觉shell这东西,必须练出来,否了看了就忘,忘的比看的快。

照这么下去,前途暗淡啊。

这书一共9章:

第一章 小试牛刀

第二章 命令之乐

第三章 以文件之名

第四章 让文本飞

第五章 一团乱麻?没这回事

第六章 B计划

第七章 无网不利

第八章 当个好管家

第九章 管理重任


看书的时候觉得都能看懂,可是现在看着每一章的大标题,心里发怵,什么都想不起来,更谈不上什么知识系统。

试着说一下,第一二章是shell基础,第三章讲文件操作,第四章讲文本操作,第五章讲网页操作,第六章讲归档压缩加解密备份,第七章讲网络操作,第八章第九章讲系统主机管理。第一到四章属于基础部分,除了第六章,其他都属于实际应用。

每一章都有至少11至多18个鲜明应用主题,每个主题分三部分,新手上路,实战演练,工作原理。看着都这么清爽。但是作者讲的比较收,有些地方点到为止,不懂的自己着男人(man)。

觉得比较重要的命令 find xargs awk sed grep,但是现在看着这几个命令,脑袋空空如也,拔剑自顾心茫然,自刎乌江算了。。。

初学者,尤其我这样的初学者,最大的痛苦就是,不知道该怎么学,一心还急于求成,之前也试过很多次,但是看着看着就烦了。除了自我检讨毅力不足之外,考六级的经验告诉我,或者是方法不对。不能再自我矮化,就算是再自责,于问题的解决于事无补,还是在逃避。

实在看恶心了,google搜索how to learn shell script ?,搜出来的千篇一律不疼不痒。纸上得来终觉浅,要躬行啊要躬行。


第一章 小试牛刀

终端打印

    echo printf

玩转变量与环境变量

通过shell进行数学运算

    let  (( ))  $[ ]  expr  bc

     expr不允许引用;bc必须引用,还可以进制转换,平方根。。

玩转文件描述符与重定向

    重定向脚本内部的文本块  cat <<EOF> log.txt

    自定义文件描述符  exec 3<input.txt  cat <&3 使用一次后失效

数组和关联数组

     array_var=(1 2 3 4 5 6)

     declare -A ass_array

     ass_array=([index1]=val1 [index2]=val2)

     echo $(!array_var[*]) or echo $(!array_var[@])

使用别名

     alias new_command='command sequence'

     \new_command

获取终端信息

     tput  stty

获取、设置日期及延时

调试脚本

    bash -x script.sh

函数和参数

    向命令传递参数

        command -p -v -k 1 file

        command -pv -k 1 file

        command -pvk 1 file

        command file -pvk 1

读取命令序列输出

已不按回车的方式获取字符“n”

        read -n num_of_chars variable_name

        read -s var

        read -p "Please input" var

        read -t timeout var

        read -d delim_char var

字符分隔符和迭代器

比较与测试


第二章 命令之乐

用cat进行拼接

    cat concatenate

        -s  压缩连续空白行

        -T  将制表符显示为^I

        -n  行号

录制与回放终端对话

    script scriptreplay

文件查找与文件列表

    find . \( -name "*.txt" -o -name "*.pdf" \) -print

    find . -path "*hitagi*" -print

    find . -iregex ".*\(\.py\|\..sh\)$" -print

    -maxdepth -mindepth

    -atime -mtime -ctime # -7 7天之内 +7 7天之前 7 恰好7天前

    -amin -mmin -cmin

    -size #b c w k M G

    -delete #惨痛教训

    -perm

    -user USER

    -exec

        find . -type f -user root -exec cat {} \; > all_root_files.txt

        -exec ./commands.sh {} \;

        find . \( -name "*.git" -prune \) -o \( -type f -print \)

将命令输出作为命令参数(xargs)

    echo "splitXsplitXsplitXsplitXsplitXsplit" | xargs -d "X" -n 2

    cat arg1.txt | xargs -n 1 echo

    cat arg1.txt | xargs -n 1 -I {} echo -p {} -l

    find . -type f -name "*.txt" -print0 | xargs -0 rm f

用tr进行转换

    echo hello 1 char 2 next 4 | tr  -d -c '[0-9] \n'

    tr -s ' '

校验和与核实

    md5sum filename > filename.md5

    md5sum -c filename.md5

    sha1sum

        filename.sha1

排序、单一与重复

    sort -m sorted1 sorted2 #?

    sort -nrk n1.m1 n2.m2 data.txt

    sort -z data.txt | xargs -0

    sort -bd data.txt

    uniq

        -u

        -c

        -s -w

        -z

临时文件命名与随机数

分隔文件和数据

    split -b 10k data.file -d -a 4 split_file

        -l

    csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log

根据扩展名切分文件名

    ${变量#关键词}                 从头开始,符合最短删除
    ${变量##关键词}               从头开始,符合最长删除
    ${变量%关键词}                从尾开始,符合最短删除
    ${变量%%关键词}            从尾开始,符合最长删除
    ${变量/旧字符/新字符}     替换第一个
    ${变量//旧字符/新字符}    替换全部

用rename和mv批量重命名文件

    #重写rename?

    rename 's/ /_/g' *

    rename 'y/a-z/A-Z/' *

拼写检查与词典操作

交互输入自动化

    echo -e "1\nhello\n" | ./interactive.sh


第三章 以文件之名

生成任意大小的文件

    dd if=/dev/zero of=junk.data bs=1M count=1

文本文件的交集与差集

    comm

        -1

        -2

        -3

    comm A.txt B.txt -3 | sed 's/^\t//'

查找并删除重复文件

    #? sed awk

创建长路径目录

    mkdir -p

文件权限、所有权和粘滞位

    u

        -

            S 允许用户以其拥有者的权限来执行可执行文件,即使这个可执行文件是由其他用户运行的

        d

            r 允许读取目录中文件和子目录的列表

            w 允许在目录中创建或删除文件或目录

            x 是否可以访问目录中的文件和子目录

    o

        d

            t or T 只有创建该目录的用户才能删除目录中的文件

    chown uesr.group . -R

    chmod 777 . -R

创建不可修改文件

    chattr +i file

批量生成空白文件

    touch filename

    -a

    -m

    -d

查找符号链接及其指向目标

    readlink

列举文件类型统计信息

    declare -A statarray

    file -b "$line"

    echo ftype : ${statarray["$ftype"]}

环回文件与挂载

    #?

生成ISO文件及混合ISO

    #?

查找文件差异并进行修补

    diff -u version1.txt version2.txt > version.patch

    patch -p1 version1.txt < version.patch

    diff -Naur directory1 directory2

head与tail——打印文件的前10行或后10行

    head -n N file

    head -n -N file

    tail -n N file

    tail -n +(N+1) file

    PID=$(pidof gedit)

    tail -f growing_file --pid $PID 

只列出目录的其他方法

    ls -d */

    ls -F | grep "/$"

    ls -l | grep "^d"

    find . -maxdepth 1 -type d -print

在命令行中用pushd和popd快速定位

    pushd /var/www

    pushd /usr/src

    pushd /usr/src

    pushd /etc

    dirs

    pushd +3

    popd +1

    cd -

统计文件的行数、单词数和字符数

    wc -l

    wc -w

    wc -c

    wc file -L

打印目录树

    tree

    sudo apt-get install tree

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值