菜鸟shell 脚本学习日记

1、shell 脚本统计当前目录下指定后缀文件行数:

获取当前目录下所有后缀为.txt 文件行数,包含空白行(包括子目录):

$find . -name "*.sh" |xargs cat |wc -l


获取当前目录下所有后缀为.txt 文件行数,除去空白行(包括子目录):

$find . -name "*.sh" |xargs cat |grep -v ^$ |wc -l


2、echo -e 转义字符串序列

eg:

echo  -e "1\t2\t3"

1 2 3


3、修改bash提示字符串(username@hostname:~$)

$ PS1="\u@\h:\w$"    #可以利用\e[1;31m 给提示字符串设置颜色,同样可以用"\e[1;41m" 设置提示字符串背景颜色。

eg:

PS1="\e[1;31m \u@\h:\w$ \e[1;42m"


4、将脚本内部的文本块进行重定向

eg:

#!/bin/bash

cat <<EOF> log.txt

LOG FILE HEADER

This is a test log file

Function: System statistics

EOF

$cat log.txt

LOG FILE HEADER

This is a test log file

Function: System statistics

5、自定义文件描述符(<读、>写、>> 追加)

创建一个文件描述符用于写入:

$exec 4 > output.txt

$echo  newline >&4

$cat output.txt

newline


6、shell脚本获取终端信息

tput 和stty 是两款终端处理工具,下面分别介绍:

1)获取终端行数和列数:

$tput cols

$tput lines

2)打印当前终端名:

$tput longname

3)将光标移动到坐标(100,100)处:

$tput cup 100 100

4)设置终端背景色:

$tput setb n

其中,n可以在0到7之间取值。

5)tput setf n

其中,n可以在0到7之间取值。

6)设置文本演示为粗体:

$tput bold

7)设置下划线的起止

$tput smul        //从此行开始具有下划线

$tput rmul        //下划线结束

8)删除从当前光标位置到行尾的所有内容:

$tput  ed

9)在输入密码时,不应该显示输入内容。下面使用stty来实现这一要求:

#!/bin/bash

#Filename : password.sh

echo -e "Enter password: "

stty -echo

read password

stty echo

echo

echo $password read.

/* 选项 -echo禁止将输出发送到终端,而选项echo则允许发送输出 */


7、脚本调试

1)使用选项-x,启用shell脚本的跟踪调试功能:

$bash -x test1.sh

2)使用set -x 和set +x对脚本进行部分调试,例如:

#!/bin/bash  
for i in {1..6};
do
        set -x
        echo=$i    
        set +x
done
echo "Script executed"

//只会打印出echo $i的调试信息,因为使用了-x和+x对调试进行了限制。


8、不使用回车键来读取N个字符(read 命令的高级应用)

1)从输入中获取n个字符存入val中:

$read -n -2  val      //读入2个字符存入val,结束此命令

$echo $val

2)无回显方式读取密码:

$read -s val

3)输入时打印显示提示信息:

$read -p "Enter input:"  val

4)在特定时限内读取输入,超时命令退出,相应值为空:

$read -t 2 val    //2s内输入,存入val

5)用特定的限定符作为输入行的结束符:

$read -d ":" val 

hello: //val 被设置为hello

9、小技巧,运行命令直至执行成功

eg:

1)方法一:

repeat()

{

while ture

do

$@ && return

done

}

#运行,如:

repeat  ls     #执行ls命令,并结束

repeat  aaa  #提示aaa: command not found ,并一直循环执行。

2)方法二:

#此方法使用shell内建的":",命令,尽管可读性不高,但是肯定比第一种方法块。

repeat()

{

while :

do

$@ && return

done

}


10、find 命令重要使用场景

1) 利用find执行命令或动作

find 和借助选项-exec和其他命令组合。

eg:寻找root用户全部文件,并将所有权修改为newman

#find  . -type f -user root -exec chown newman {} \;      // {} 是一个与-exec选项搭配使用的特殊字符串,会被替换为find 最终搜索的文件名。

eg:将目录所有c程序文件拼接起来写入单个文件all_c_files.txt

#find . -type f -name "*.c"  -exec cat {} \; > all_c_files.txt

eg: 让find跳过指定目录

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


11、玩转xargs ,xargs 应该紧跟在管道操作符之后,以标准输入作为主要的源数据流。

1)将多行输入转换为单行输出

[root@localhost workplace]# cat char.sh 
1 2 3 4 5 6 
7 8 9 
10 11 12

[root@localhost workplace]# cat char.sh  | xargs
1 2 3 4 5 6 7 8 9 10 11 12

 2)将单行输入转换为多行输出

[root@localhost workplace]# cat char.sh  | xargs -n 3
1 2 3
4 5 6
7 8 9
10 11 12

3)可以用自己的界定符来分隔参数。用 -d 选项为输入指定一个定制的定界符。

[root@localhost workplace]# echo "splitXsplitXsplitXsplit" | xargs -d X
split split split split

//多选项结合:

[root@localhost workplace]# echo "splitXsplitXsplitXsplit" | xargs -d X -n 2
split split
split split

//统计源代码目录中所有C程序的文件按行数

#find  src/ -type f -name "*.c" -print0 | xargs -0 wc -l


12、加密工具与散列,linux常用的加解密工具如:crypt、gpg、base64、sha1sum

1)gpg 是一种应用广泛的工具,它使用加密技术来保护文件,以确保数据在送达目的地之前无法被读取。

eg:

$gpg -c test.txt  #加密,该命令采用交互式读取口令,在当前目录下生成test.txt.gpg

$gpg test.txt.gpg  #输入加密时的口令对文件进行解密,生成test.txt即源文件。


13、排序、唯一与重复

1)一组文件进行排序

$sort file1 file2  > sorted.txt  或者 $sort file1 file2  -o  sorted.txt

2)按照数字顺序进行排序

$sort -n file.txt

3)按照逆序进行排序

$sort -r file.txt

4)按照月份进行排序

$sort -M months.txt

5)合并两个已排序过的文件

$sort -m sorted1.txt sorted2.txt

6)找出已排序文件中不重复的行

$sort file1.txt file2.txt | uniq

7)检查文件是否已经排序过

#!/bin/bash

#功能描述:排序

sort -C filename;

if [ $? != 0 ]; then

    echo Sorted;

else

    echo Unsorted;

fi

8)依据键或列进行排序

#依据第一列按照数字,以逆序进行排序

$sort -nrk 1 data.txt

#依据第二列进行排序

$sort -k  2 data.txt

# -b忽略文件中的前导空白行,-d 用于指明以字典序进行排序。

$sort -bd unsorted.txt

9)、uniq ,此命令找出唯一行,用于排过序的数据输入。

$sort  unsorted.txt | uniq  #只显示唯一的行

$sort  unsorted.txt | uniq -c  #统计各行在文件中出现的次数

$sort  unsorted.txt | uniq -d  #找出文件中重复的行

采用 -s 和 -w来指定键:

# -s 指定可以跳过前n个字符

#-w 指定用于比较的最大字符数

eg:

$sort unsorted.txt | uniq -s 2 -w 2






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值