Shell脚本入门到上手

最近工作看了好多Shell脚本的使用,没想到这个Shell脚本既然这么强大,能够实现那么复杂的逻辑功能,随便谢谢博客做一下学习笔记吧~之前有学过一些入门的用法所以一些比较简单的就不写了,本博客适合那些有点基础的人来学习~

注释:pattern 代表匹配模式,可以使用正则表达式

目录

一、工作中常用的命令

二、Shell脚本的基础知识

1、常见变量

2、常用的修饰符/逻辑操作符

3、执行脚本的四种方法

4、引号

5、补充命令

6、测试

7、其他(大家自行去学习补充)

三、Shell脚本的略高级用法

1、正则表达式

2、三大文本处理利器

3、调试


一、工作中常用的命令

(每个命令只是写了常用的功能和用法,如需详细了解移步 ==> 百度

1、查看文件并显示大小并进行筛选

find  查找目录 -name pattern -exec ls -l {} \;  | grep pattern 

2、查看当前用户名

/usr/bin/id -u -n 或者 whoami

3、对文件名的绝对路径去除目录成分或提取目录成分

提取目录:dirname
提取文件名:basename

4、打印日志

logger -t tag -p local0.info "string"

其中tag会在日志打印内容前面添加标签tag,-p后面的为优先级和日志类型,优先级有local.0-local7等,日志类型还有warn等

默认打印日志位于系统的操作日志,即/var/log/messages

5、设置文件的所有者和组别

chown [options]  [所有者]:[所在组] file

6、设置新建文件的权限

umask XXXX

xxxx即四个数,第一个数字可以不写,这是掩码的形式,例如umask 022,之后创建的新文件权限都是755。单独使用umask可以查询当前的掩码是多少。

7、递归查看目录(如果是Ubuntu有下载tree,查看效果更好)

ls -R

8、处理文件

awk -F [分割符] ’/正则表达式 / 处理语句‘ file

默认使用空格或者制表符来作为分割符。

9、流处理文本

sed [options] [script] [inputfile..]

10、将stderr与stdout合并

2 >& 1

11、在内核运行时动态地修改内核的运作参数

sysctl  -p 从配置文件"/etc/sysctl.conf"加载内核参数设置
        -a 查看所有可读变量

12、睡眠10秒

sleep 10

13、递归跟随给出文件名的所有符号链接以标准化,所有组件都必须存在

readlink -e

14、创建链接:

软链接:ln -s 链接的位置 创建的链接名
硬链接:ln (无-s) 链接的位置 创建的链接名

注:硬链接必须在同个OS中才能够有效,使用软链接的好处还有就是可以减少应用程序对一些依赖库的依赖性,减低耦合性,只要将软链接指向新的地方即可~

15、利用URL规则在命令行下工作的文本传输工具,支持上传和下载

curl [options] [url] 

16、查看进程

ps -aux 用BSD的格式来显示进程
   -ef  用标准的格式来显示进程

查看进程较多的时候,可以使用管道或者重定向比较方便。

17、expect 用来自动化控制和测试的工具,可以模拟“交互”

     expect工具里的关键命令:

spawn ——启动进程
expect ——从进程中接收字符串
send —— 向进程发送字符串,用于模拟用户输入
interact ——用户交互

18、xargs 用作替换工具,读取输入传递给另外的命令

19、dos2unix 将DAO格式的文本文件转换成UNIX格式

不同操作系统文本文件的区别:UNIX/Linux 是以/n来换行的,而dos/windows则是/r/n,mac是以/r。

tip:以上命令很多在工作中都算是比较常用的,如果遇到完全不懂的命令可以去百度谷歌,而遇到命令的参数不太确定的情况就推荐用man手册,用man 加上你要查的命令即可~

二、Shell脚本的基础知识

1、常见变量

$0$n$#$*(1、2.。。n)$@$$$? 
脚本名参数参数个数

“参数1。。参数n”(以一个字符串形式放回)

“参数1”。。“参数n”(返回多个变量)进程ID前一个命令的返回姿态码 

${ }:将括号里面的变量转义出来 ;  $() :将其中的字符串变为Shell命令来执行;

2、常用的修饰符/逻辑操作符

local:修饰局部变量

unset:清除变量

let ”...‘:运行“...”中的语句

${Des|a|b}:用b来替代Des中的a

!:非

-a:与

-o:或

例如[ -f a.txt -o -x b.txt ]

3、执行脚本的四种方法

      -授予执行的权限,能够直接运行,即./*.sh

      -没有授予执行权限时,调用Shell脚本解释器来执行,即sh *.sh或 /bin/bash *.sh

      -通过source命令来执行 ==》这个是在当前的Shell程序中执行的,没有创建子进程

      -. /*sh (.后面有空格,等价于上面用source命令来执行)

4、引号

' ' : 括起来的字符都视为普通字符

" ":里面$、用当单引号’‘修饰的会被处理

` `: 用首先执行该命令,用命令的输出代替它

5、补充命令

echo: 打印文本  ,加-n之后 文本的行尾不追加换行符;    cat -n:显示行号地查看文本

fold:格式化行;     fmt:格式化段落;

wc:统计行数;      df -h 查看OS的内存(磁盘)使用情况;

cut:选取文本列;   paste:拼接文本列;   join:连接文本列

diff:比较文本;       comm:比较有序文件

tar -xf *.tar -C dir :解压到指定目录

tar -cf *.tar dir bdabai :打包文件

scp source destination:加密的复制,适用于远程复制的那种 ;

ssh -p 端口号(默认是22) username@IP 用ssh的方法远程访问节点;

6、测试

类型:test或者[ ]   (成立返回 0,跟一般的编程语言不太一样)

文件测试:-a file是否存在 ; -b(c、d) file文件是否存在且为块文件(字符链接、目录);

                  -x(r、w) file文件是否存在且为可执行(读、写);

                  -f file文件是否存在且为常规文件(即ll查看的时候第一个符号是“-”的文件);

字符串测试:-z string是否为空串;  !=  是否不相等 ;     =   是否相等;

                      是否不为空串:test string(不能用[])或者-n string

整数测试:-eq 等于; -ne 不等于;-gt 大于;-ge 大于等于;lt 小于;le 小于等于

7、其他(大家自行去学习补充)

循环+判断+运算...

三、Shell脚本的略高级用法

1、正则表达式

常见的符号
 .   +    ?   [ ]    [^]  (..|..|..)    \
末 >=0 1>=10或1 字符集匹配字符集不匹配  一组可选值集合转义符号

对前一个字符集的X次匹配

{m,n }: m <= X <= n

{m }: m = X 

{m,n}: m <= X 

字符匹配有个贪心原则:即会尽量匹配到更长的!!

支持的linux工具有:grep(匹配文本行)、sed(改变输入流)、awk(处理字符串的语言)、more或less(文件查看程序)、ed或vi或vim(文本编辑)

2、三大文本处理利器

grep(用法:grep [optinos] pattern [file])

    -i :忽略字母大小写;   -l:列出文件名,不显示匹配的内容;   -v:显示不匹配的 ;

    -r :递归搜索;   -q :禁止输出匹配结果,以退出码表示是否成功;  -n:显示行号;

    -c:显示行号;   -c:只打印匹配到的文本行数;

sed(用法:sed [options] [script] [imput file...])

  [options]

    -n :取消默认输出;   -f :从脚本中读取命令;  -i :直接修改原始文件;

    -l :指定行的长度;   -e :允许执行多个子命令;

  [sript] —— 由一系列sed命令组成

     sed命令:定位参数 + 编辑命令

     定位参数 [address1[,address2]]:

           -第X行:X

           -第X-Y行:X,Y

           -其实行和步长:first~step

           -最后一行:$

           -某行后几行:X,+n

     编辑命令 command [argument]:

           -选择文本:p 

           -替换文本:s/pattern/replacement/[flag]   (s后面的符号就会被当做分隔符,不一定一定要用 /)

                   flag -g:全局

                          -p:替换第一个符合的字符串,并输出到stdout

                          空:替换第一个符合的字符串

           -删除文本:d

           -追加:a string

           -插入文本:i string

awk(用法:awk pattern {actions})

     内置系统变量:NF(列数变量)、NR(行数变量)、$0(行变量)、$1、$2...(各个列变量),FS(字段分隔符,默认是空格或制表符),利用BEGIN这个关键字可以预先设置awk的变量。

awk和sed都是可以像Shell一样写成脚本形式的,带上 -f 修饰即可,其中awk的脚本形式的语法很复杂很多,感兴趣地去看看书输入了解~

3、调试

        -echo 最简单的调试,即类型C语言的printf()一样,遇到比较复杂光是这个还不够

        -trap 捕获信号,用法trap ‘command’ signal 捕获指定的信号,并且执行预定的命令(Shell教本执行的时候会产生3个伪信号:EXIT——执行完成;ERR——非0返回;DEBUG 每条命令执行前)

        -bash -x 单步调试命令(如果想限定范围:可以用set -和set+来限定,不过调试就直接使用bash即可)

        -tee在管道和重定向的时候使用有优势,例如ls | tee test.txt |awk...(使用-a表示追加的意思)

(版权声明:本文为博主原创文章,转载请注明出处。)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream_Kite

你的鼓励,是我不断创作的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值