首页 > 系统相关 >Linux 搬砖常用Shell-扩展

Linux 搬砖常用Shell-扩展

时间:2022-10-20 12:03:21浏览次数:48  
标签:00 Shell 01 扩展 echo sed awk Linux date

1.基础语法

1.1.循环

#!/bin/bash
for i in `seq 1 10`
do
echo "xxxx"
done

1.2.SHELL中的特定变量

  1. $# 传递到脚本的参数个数
  2. $* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此项参数可超过9个
  3. $$ 脚本运行的当前进程ID号
  4. $! 后台运行的最后一个进程的进程ID号
  5. $@ 与 $# 相同,但使用时加引号,并在引号中返回参数个数
  6. $- 显示shell使用的当前选项,与SET命令功能相同
  7. $? 显示命令最后退出的状态。0表示没有错误,其他任何值表明有错误

1.3.SHELL脚本语法检查

$ sh -n ***.sh

以上命令可以检查shell脚本中是否存在语法错误,如果没有异常输出证明脚本没有明显的语法问题。

$ sh -vx ***.sh

该命令可以看到每行代码的原始命令以及命令执行时的情况,包括运算结果、逻辑判断结果、变量赋值等。

2.常用搬砖Shell

2.1.查找文件

$ find . -name 'name'     #默认支持递归查询
$ #查找某个具体日期之后修改过的文件
$ find . -newermt “2015-05-10”
$ #查找某个具体日期之前修改过的文件
$ find . ! -newermt “2015-05-10"

2.2.查找文件后执行命令

$ find . -name 'name' | xargs -n 1 cat

2.3.比较文件夹

$ diff -r -x *.bak -c folder1 folder2

2.4.拷贝文件的时候排除svn文件

copy with tar 技巧:

$ tar --exclude='.svn' -c -f - /path/to/sourcedir/* | (cd /path/to/destdir ; tar xfp -)
$ # 比较懒的方法,拷贝后删除
$ find /path/to/destdir -name '.svn' -exec rm -r {} \;
$ # svn的导出export功能
$ # 使用rsync方法:
$ rsync -r --exclude=.svn /home/user/progname/ /home/user/progname.copy

2.5.一条循环统计的命令

$ for((i=110714;i<110719;i++)); do echo -e "$i\t\c" ; zgrep 'systemnotice' $i/$i.t.leju.com_*.cn.gz | wc -l; done

利用循环,分别统计gz文件中含有关键字的记录,同时打印出日期和统计结果

使用到了 echo -e 属性,还用到了 zgrep 来查找经过gzip压缩的文件内容。

扩展用法,利用echo打印三列内容。

$ for((i=110804;i<110816;i++)); \
do echo -e "$i\t\c"; \
echo -n `zgrep '/love/?m=yiqiso&a=showtop HTTP/1.1' $i/$i.t.leju.com_*.cn.gz | wc -l`; \
echo -e "\t" `zgrep '/love/?m=yiqiso&a=showtop HTTP/1.1' $i/$i.t.leju.com_*.cn.gz | awk '{print $1}' | awk -F ":" '{print $2}' | uniq -c | wc -l`; \
done


利用 echo -n 同行打印的功能,将第三行的内容合并到上面一行中。第二个统计数字为日志中的独立IP数目,利用uniq -c 来进行统计

2.6.修改服务器时间

date 显示当前时间
date -s "2007-08-03 14:15:00" 修改时间
clock -w 把系统时间写入CMOS
hwclock --set --date="03/19/2013 19:09:00"

2.7.替换文件某行的内容

sed '2 s/xxx/bbb/'

2.8.查找前缀和后缀符合特定要求的内容,并进行替换

1,$s/^BHME\(\S\)\(\S\)\(\S*\)\(\S\)\(\S\)\.jpg/\/BHME\/Source_pic\/\1\5\/\2\4\/BHME\1\2\3\4\5\.jpg/g

2.9.查找文件内容中含有特定字符的文件,并列出文件列表

find . -type f  -exec grep 'anlian' -l {} \;

2.10.查找文件内容并删除保存

sed -i '/aaa/d'  filename

2.11.查找第五列的内容,并且取部分内容

for i in `awk '{print gensub(/\/data1\/static\.house\.sina\.com\.cn\/cricfs\//,"","g",$5) }' \
/data1/logs/vfslog/received/111122/111122-upload.file.dc.cric.com.log`;\
do `rsync -Rtp $i 172.16.244.156::upload_file_dc_cric_com_storage/`; done;


2.12.查找并杀死符合条件的进程

$ kill -9 `ps -ef | grep php | grep -v grep | awk '{print $2}'`     
# 这个命令可以杀死一条符合条件的进程
$ ps -ef | grep background |awk '{print $2}' | sed "s/^/kill -9 /g"|sh -
# 这样就可以杀死多个进程

2.13.批量生成建表语句

for((i=0;i<=100;i++)); do sed s/#/$i/ test >> sql; done;

2.14.批量修改文件名

Linux有一个很好用的rename命令,格式如下:rename oldpattern newpattern files

还可以使用脚本的方式,其中用到了sed的替换指令。

for i in *;do OUT=$(echo $i | sed 's/ *//g');mv "$i" $OUT;done;

完全使用sed的一个方案,看不太明白

ls | sed -n '/ /{h;s/ //g;G;s/ /\\ /g;s/\(.*\)\n\(.*\)/mv \2 \1/e}'

2.15.查看系统的发行版本

cat /etc/issue
cat /etc/redhat-release

2.16.添加路由

route add -net 10.71.32.0/24 gw 172.16.228.1
#删除路由
route del -net 0.0.0.0 gw 192.168.56.1

2.17.SED查找内容并输出

查询匹配的内容并输出

sed -n '/17\/Apr\/2011/,$p' /data0/bbslog/110423/i.house.sina.com.cn_244192.log  > output_test

2.18.时间处理

# 查看当前时间戳
$ date +%s

# 查看指定时间的时间戳
$ date -d 2008-01-01 +%s
$ date -d 20080101 +%s

# 将时间戳转换为日期字符串
$ date -d '1970-01-01 UTC 1199116800 seconds'
2008年 01月 01日 星期二 00:00:00 CST
$ export LANG=en
$ date -d '1970-01-01 UTC 1199116800 seconds'
Tue Jan 1 00:00:00 CST 2008

# 将时间戳转换为日期格式
$ date -j -f "%s" 160336789645 "+%Y-%m-%d %H:%M:%S" //Mac下有效
$ date -d @1557025194 "+%Y-%m-%d" //Mac下无效

2.19.AWK抽取文件内容

# 抽取文件的奇数行
$ awk 'NR%2' file

# 抽取文件的偶数行
$ awk 'NR%2==0' file

2.20.文件的压缩与解压缩

tar -czf xxx.tar.gz folders
# 压缩并打包目录

 2.21.文件系统挂载

$ mount 11.155.x.x:/vol/xxx /folder


标签:00,Shell,01,扩展,echo,sed,awk,Linux,date
From: https://blog.51cto.com/waringid/5779789

相关文章

  • 解决linux系统时间不对的问题
    输入date查看时间,发现不对,相差甚远!(当前时间2019/09/0611:19)   安装ntpdate:   删除etc/localtime文件,并复制shanghai时区文件替换到这里。   然后ntp......
  • linux下rsync的同步
    rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具RemoteSync可以远程同步,支持本地复制,或者与其他SSH、rsync****主机同步文件下载地址:链接:https://pan.bai......
  • Linux笔记-top命令信息详解
    目录参考资料top命令详解使用/proc/self/status注入代码监控某段代码执行前后进程内存状态参考资料https://segmentfault.com/a/1190000013504502https://blog.csdn.net......
  • powershell 笔记
    PowerShellhttps://learn.microsoft.com/zh-cn/powershell/scripting/how-to-use-docs?view=powershell-7.2环境变量#读取指定环境变量PS>$env:windirC:\WINDOWS......
  • Linux shell 常用函数
    *以下函数或文件,在某些发行版本系统不支持,请先测试确认是否可用。 ####  生成连续的数字  ####  方式一: [1]正序:{1..16}倒序:{16..1}示例:forni......
  • 如何查看linux kernel邮件列表【转】
    转自:https://blog.csdn.net/jasonactions/article/details/1207764341.前言本文主要总结浏览kernelpatch的方法,以此希望促成自己养成阅读patch的习惯。用一个朋友的话说......
  • 已整理-Linux正则表达式
     目录:1、基本正则表达式2、扩展正则表达式3、示例 1、基本正则表达式1.1、字符匹配.匹配任意单个字符,不含空格[]......
  • Linux 启用rsyslog的启用网络日志服务
    网络日志服务功能:  将多个远程主机的日志集中发送到一台日志服务器上存储,方便后期的管理。说明:  rsyslog服务和apache、php一样基于模块化设计,需要启用对应的功能就......
  • Linux软链接的创建与删除
    软链接的创建:ln -s  [源文件或目录] [目标文件或目录]软链接的删除 rm–rf软链接名称(请注意不要在后面加”/”) ......
  • [Linux传奇]Linux之前,Unix的历史.
    [Linux传奇]Linux之前,Unix的历史一个伟大的梦想-----Multics在很久很久以前,有一个伟大的计划-----Multics.Multics是一个分时操作系统,该系统开始作为一个合资项目,是196......