Shell脚本基础

  Shell是一种脚本语言,又是一种命令语言。通俗来讲shell脚本就是一系列命令的集合,可以在Unix/linux上面直接使用,来实现自动化运维。Shell 主要用来开发一些实用的、自动化的小工具,而不是用来开发具有复杂业务逻辑的中大型软件。

  *:监控linux系统环境的使用情况
  *:数据的处理。eg:日志的切割、分析、统计等  
  *:与数据库的交互,对数据库进行增,删,改,查等操作
  *:监控进程,自动化启停服务进程
  *:完成一些重复性的工作。eg:创建100个新用户;到服务器集群配置某个文件等

  shell解释器:是一种命令解释器,主要作用是对命令进行运行和解释,将需要执行的操作传递给操作系统内核并执行。shell脚本不一定得有解释器,但是我们在写shell脚本的时候最好还是带上shell解析器。常见的shell解析器有这几种。

  #!/bin/bash(默认)
  #!/bin/ksh
  #!/bin/bsh
  #!/bin/sh

shell脚本的三种执行方法:
  方法1:添加执行权限 chmod +x shell.sh
               ./shell.sh
  方法2:sh shell.sh 或者bash shell.sh
  方法3:source shell.sh

如下图我写了一个名叫wulei.sh脚本,以第二种方式直接运行的,以第一种方式运行没有执行权限,添加权限后就可以运行了。
  这个脚本当前组的所有者只有rw权限,没有x权限,给它赋予权限后就成了 -rwx r-x r-x
  文件权限:-rw- r-- r--
  目录权限:drw- r-- r--
  分三列:每三个为一列,分别是所有者(owner),所属组(group),其他(others)
  rwx 读r:4 写w:2 执行x:1

  

常见符号指令

$?      #判断上一条命令执行的是否成功
$0      #返回脚本的文件名称
$1-$9   #返回对应的参数值
$*      #返回所有的参数值是什么
$#      #返回参数的个数和
            
新建脚本:vim wulei2.sh

#!/bin/bash
#by 吴磊 2019-3
echo "脚本名称:$0"
echo "第一个参数是:$1"
echo "第二个参数是:$2"
echo "一共有多少参数:$#"
echo "这些参数是什么:$*"
执行脚本
[root@wulei shell]# sh wulei2.sh we23 45er 23we 67ty
脚本名称:wulei2.sh
第一个参数是:we23
第二个参数是:45er
一共有多少参数:4
这些参数是什么:we23 45er 23we 67ty
[root@wulei shell]# 
常见变量
整数运算:
    加:expr 12 + 6         expr $a + $b
        echo $[12 + 6]      echo $[a + b]
        echo $((12 + 6))    echo $((a + b))
        
    减:expr 12 - 6          expr $a - $b
        echo $[12 - 6]       echo $[a - b]
        echo $((12 - 6))     echo $((a - b))

    乘:expr 12 \* 6        expr $a \* $b
        echo $[12 * 6]      echo $[a * b]
        echo $((12 * 6))    echo $((a * b))

    除:expr 12 / 6         expr $a / $b
        echo $((12 / 6))    echo $((a / b))
        echo $[12 / 6]      echo $[a / b]

    求余:expr 12 % 6       expr $a % $b
          echo $((12 % 6))  echo $((a % b))
          echo $[12 % 6]    echo $[a % b]

小数运算:
    bc计算器可以进行小数运算(yum install bc -y)
    scale可以指定保留多少位小数(对加减无效,对乘,除,求余有效)
    
    echo "scale=2;(0.2+0.3)/1" | bc   #计算出0.2+0.3的和并保留俩位小数,默认bc计算器会省略掉个位数的0
    echo "scale=2;(1.2+1.3)/1" | bc   #计算出1.2+1.3的和并保留俩位小数
常见运算
>   #会覆盖原有的内容
>>  #不会覆盖原有的内容
;   #执行多条命令
|   #管道符
&&  #前面的命令执行成功,后面的才可以执行
||  #前面的命令执行失败,后面的才可以执行
""  #会输出变量值
''  #输出本身
``  #输出命令结果 eg:a=`date`;echo $a
2>/dev/null  #有错误信息则不打印
1>/dev/null     #有正确信息则不打印


文件默认数据
[root@wulei shell]# cat wulei3.sh
第1行
第2行

【> 覆盖数据(覆盖原有的数据)】
[root@wulei shell]# cat >wulei3.sh
覆盖数据
^C
[root@wulei shell]# cat wulei3.sh
覆盖数据

【>> 追加数据(在文件末尾追加数据)】
[root@wulei shell]# cat >>wulei3.sh
后面追加数据
^C
[root@wulei shell]# cat wulei3.sh
覆盖数据
后面追加数据

【; 执行多个命令(先执行前面的命令,后执行后面的命令)】
[root@wulei shell]# cat wulei3.sh ; ll
覆盖数据
后面追加数据
total 12
-rw-r--r--. 1 root root 183 Mar 23 04:03 wulei2.sh
-rw-r--r--. 1 root root  32 Mar 23 10:24 wulei3.sh
-rwxr-xr-x. 1 root root  89 Mar 23 09:53 wulei.sh
[root@wulei shell]# 

【| 管道符(先获取符号前面的操作,把数据通过grep传给满足后面命令)】
[root@wulei shell]# cat wulei3.sh | grep 数据
覆盖数据
后面追加数据
[root@wulei shell]# cat wulei3.sh | grep 追加
后面追加数据
[root@wulei shell]# 

【&& 前面的命令执行成功,后面的才可以执行】
[root@wulei shell]# cat wulei3.sh && ll
覆盖数据
后面追加数据
total 12
-rw-r--r--. 1 root root 183 Mar 23 04:03 wulei2.sh
-rw-r--r--. 1 root root  32 Mar 23 10:24 wulei3.sh
-rwxr-xr-x. 1 root root  89 Mar 23 09:53 wulei.sh
[root@wulei shell]# cat wulei333.sh && ll
cat: wulei333.sh: No such file or directory

【|| 前面的命令执行失败,后面的才可以执行】
[root@wulei shell]# cat wulei3.sh || ll
覆盖数据
后面追加数据
[root@wulei shell]# cat wulei333.sh || ll
cat: wulei333.sh: No such file or directory
total 12
-rw-r--r--. 1 root root 183 Mar 23 04:03 wulei2.sh
-rw-r--r--. 1 root root  32 Mar 23 10:24 wulei3.sh
-rwxr-xr-x. 1 root root  89 Mar 23 09:53 wulei.sh
[root@wulei shell]# 

【''和""的区别,前者输出文本后者输出变量】
[root@wulei shell]# cat wulei4.sh
#!/bin/bash
#by wulei test
echo "这是第一个变量:$1"
echo '这是第一个变量:$1'
echo "这是第二个变量:$2"
echo '这是第二个变量:$2'

[root@wulei shell]# sh wulei4.sh 007 348
这是第一个变量:007
这是第一个变量:$1
这是第二个变量:348
这是第二个变量:$2

【`` 里面的值就是变量值的本身】
[root@wulei shell]# a='date'
[root@wulei shell]# echo $a
date
[root@wulei shell]# a="date"
[root@wulei shell]# echo $a
date
[root@wulei shell]# a=`date`
[root@wulei shell]# echo $a
Sat Mar 23 11:02:40 EDT 2019

【2>/dev/null 有错误信息则不打印】
[root@wulei shell]# cat aaa.txt
cat: aaa.txt: No such file or directory
[root@wulei shell]# cat aaa.txt 2>/dev/null
[root@wulei shell]# 

【1>/dev/null 有正确信息则不打印】
[root@wulei shell]# cat wulei.sh
#!/bin/bash
#《shell脚本案例》
#by wulei 2019/3/23 
echo 'shell脚本案例编写'
[root@wulei shell]# cat wulei.sh 1>/dev/null
[root@wulei shell]# 
常见符号
文件(夹)或者路径:
    -e  目标是否存在(exist)
    -d  是否为路径(directory)
    -f  是否为文件(file)
        [ -e wulei2.sh ] && echo '存在' #存在文件则输出
        [ -d /usr/local ] && echo 'yes' #url存在则输入
        [ -e foer.sh ] || touch foer.sh #没有foer.sh这个文件,假如没有就创建出foer.sh文件

权限:
    -r  是否有读取权限(read)
    -w  是否有写入权限(write)
    -x  是否有执行权限(excute)
        [ -x 123.txt ] && echo '有执行权限' #该目标有x权限则输出

整数值比较(int型):
    -eq 等于(equal)
    -ne 不等于(not equal)
    -gt 大于(greater than)
    -lt 小于(lesser than)
    -ge 大于或者等于(greater or equal)
    -le 小于或者等于(lesser or equal)
        [ 9 -gt 8 ] && echo '大于'

小数值比较(浮点型):
    [ `echo '1.2 > 1.1' | bc`  -eq 1 ] && echo ‘大于’
    *[]里面的表达式成立,则输出大于;前半截为一个表达式所以
     要用``圈起来,比较的结果为true则返回1反之为0.
      
字符串比较:
    =   相等
    !=  不相等
        [ 'kkkkk' != 'kk' ] && echo '不等于'
常见条件判断

 shell脚本输入之read命令及上色

语法:read -参数 (有多个参数时,-p必须放在最后面)
-p:给出提示符。默认不支持"\n"换行
-n:限制读取字符的个数,触发到临界值会自动执行
-t:给出等待的时间,超时会退出read
-s:隐藏输入的内容
-e:对特殊字符转译

【read脚本输出案例】
#!/bin/bash
# 最多输入3个字符,5秒后退出,隐藏输入的字符
read -n 3 -t 5 -s -p "请输入密码:" pass
# -e 解析特俗字符 (换行)
echo -e "\n"
echo "您输入的密码是: $pass"


【脚本上色案例】
语法;echo -e "\033[字背景颜色;字体颜色;特效字符串\033[关闭属性"
#字体色范围:30-37
    echo -e "\033[30m 黑色字 \033[0m"
    echo -e "\033[31m 红色字 \033[0m"
    echo -e "\033[32m 绿色字 \033[0m"
    echo -e "\033[33m 黄色字 \033[0m"
    echo -e "\033[34m 蓝色字 \033[0m"
    echo -e "\033[35m 紫色字 \033[0m"
    echo -e "\033[36m 天蓝字 \033[0m"
    echo -e "\033[37m 白色字 \033[0m"
#字背景颜色范围:40-47
    echo -e "\033[40;37m 黑底白字 \033[0m"
    echo -e "\033[41;30m 红底黑字 \033[0m"
    echo -e "\033[42;34m 绿底蓝字 \033[0m"
    echo -e "\033[43;34m 黄底蓝字 \033[0m"
    echo -e "\033[44;30m 蓝底黑字 \033[0m"
    echo -e "\033[45;30m 紫底黑字 \033[0m"
    echo -e "\033[46;30m 天蓝底黑字 \033[0m"
    echo -e "\033[47;34m 白底蓝字 \033[0m"
# 特效范围
    echo -e "\033[0m 无任何特效 \033[0m"
    echo -e "\033[1m 高亮度 \033[0m"
    echo -e "\033[4m 下划线 \033[0m"
    echo -e "\033[5m 闪烁 \033[0m"
    
【上色输出脚本案例】
#/bin/bash    
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[40;37m 黑底白字 \033[0m"
echo -e "\033[41;30m 红底黑字 \033[0m"    
echo -e "\033[1m 高亮度 \033[0m"
read -p "`echo -e "\033[4m 请输入账号: \033[0m"`" name
read -p "`echo -e "\033[47;34;5m 请输入密码: \033[0m"`" pwd
echo -e "\n" #换行
echo "您输入的账号:$name    密码:$pwd"
read输出命令及上色

  

 海量数据处理之grep、cut、awk、sed 命令

grep应用场景:通常对数据进行 行的提取
语法:grep [选项]...[内容]...[file]

    -v     #提取不包含指定内容所属行的结果
    -n     #显示行号
    -w     #精确匹配(整行匹配)
    -i     #忽略大小写(linux是有严格大小写区分的)
    ^     #匹配开头行首
    -E     #正则匹配
    
【案例】
【文本内容】
[root@VM_0_3_centos wulei]# cat test.txt
user1user1user1user1
User2user2user2user2
User3user3User2user2

【查看包含指定内容的行】
[root@VM_0_3_centos wulei]# grep 'user' test.txt
user1user1user1user1
User2user2user2user2
User3user3User2user2

【查看不包含指定内容的行,并输出行号】
[root@VM_0_3_centos wulei]# grep -v -n 'User' test.txt
1:user1user1user1user1

【忽略大小写,并输出行号】
[root@VM_0_3_centos wulei]# grep -in 'User' test.txt
1:user1user1user1user1
2:User2user2user2user2
3:User3user3User2user2

【匹配整行内容】
[root@VM_0_3_centos wulei]# grep -wn 'user1user1' test.txt
[root@VM_0_3_centos wulei]# grep -wn 'user1user1user1user1' test.txt
1:user1user1user1user1

【查看以user开头的行】
[root@VM_0_3_centos wulei]# grep -n '^user' test.txt
1:user1user1user1user1

【查看以user1或user2开头的行】
[root@VM_0_3_centos wulei]# grep -nE 'user1|user2' test.txt
1:user1user1user1user1
2:User2user2user2user2
3:User3user3User2user2
grep对行提取
cut应用场景:通常对数据进行列的提取
语法:cut  [选项]...[file] 

    -d     #指定分割符
    -f  #指定截取区域
    -c  #以字符为单位进行分割
    
【案例】
【文本内容】
[root@VM_0_3_centos wulei]# cat wulei.sh
1001:1002:1003:1004
2001a a2002a2003a2004
3001:3002:3003:3004
4001b4002b4003b4004

【以:分割,截取第1列和第3列】
[root@VM_0_3_centos wulei]# cut -d ':' -f 1,3 wulei.sh
1001:1003
2001a a2002a2003a2004
3001:3003
4001b4002b4003b4004

【以b分割,截取第一列和第三列】
[root@VM_0_3_centos wulei]# cut -d 'b' -f 1,3 wulei.sh
1001:1002:1003:1004
2001a a2002a2003a2004
3001:3002:3003:3004
4001b4003

【以b分割,截取第二列到最后一列】
[root@VM_0_3_centos wulei]# cut -d 'b' -f 2- wulei.sh
1001:1002:1003:1004
2001a a2002a2003a2004
3001:3002:3003:3004
4002b4003b4004

【截取每列第5~10个字符】
[root@VM_0_3_centos wulei]# cut -c 5-10 wulei.sh
:1002:
a a200
:3002:
b4002b

【截取每列第5到最后一个字符】
[root@VM_0_3_centos wulei]# cut -c 5- wulei.sh
:1002:1003:1004
a a2002a2003a2004
:3002:3003:3004
b4002b4003b4004
cut对列提取
awk的应用场景:通常对数据进行列的提取
    语法:
        awk '条件 {执行动作}'文件名
        awk '条件1 {执行动作} 条件2 {执行动作} ...' 文件名
        或awk [选项] '条件1 {执行动作} 条件2 {执行动作} ...' 文件名

        特殊要点与举例说明:
                
            print     #打印出内容,默认会自动换行
            
            printf    #格式化输出,不会自动换行。
                  (
                    %s:  表示一个字符串
                    %ns:字符串型,n代表有多少个字符; 
                    %ni:整型,n代表输出几个数字;
                    %.nf:浮点型,n代表的是小数点后有多少个小数
                    
                    \t      #制表符(tab键)
                    \n      #换行符
                    
                    $1         #代表第一列
                    $2         #代表第二列
                    $0         #代表一整行
                    
                    -F        #指定分隔符
                    
                    BEGIN     #在读取所有行内容前就开始执行,常常被用于修改内置变量的值
                    FS        #BEGIN时定义分割符
                    
                    END     #结束的时候 执行
                    NR         #指定行号
                    )

【案例】    
 [root@VM_0_3_centos ~]# printf '%s\n%s %s' we er er er    【\n 换行 \字符串类型】
we
er erer
 [root@VM_0_3_centos ~]# printf '%s%s   %s %s%s' 1 2w3 45r   56t 6765
12w3   45r 56t6765[root@VM_0_3_centos ~]# printf '%s\n%s %s ' we er er er erer
we
er er er
erer  [root@VM_0_3_centos ~]# printf '%s\n%s\t%s' we er er 【\t隔开】
we
er    er[root@VM_0_3_centos ~]# printf '%i \t %i %i' we er er【\i int类型,这里是字符所以报错】
-bash: printf: we: invalid number
-bash: printf: er: invalid number
-bash: printf: er: invalid number
0      0 0[root@VM_0_3_centos ~]# printf '%i \t %i %i' 12 34 56【\i 输出数字】
12      34 56

【检查系统磁盘空间占用情况】
[root@VM_0_3_centos ~]# df -m 
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2036     45981   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0

【$n 输出指定行案例】
[root@VM_0_3_centos ~]# df -m | grep /dev/vda1 | awk '{printf "/dev/vda1的内存使用率:"}{print $5}'
/dev/vda1的内存使用率:5%
[root@VM_0_3_centos wulei]# df -m | grep devtmpfs | awk '{printf "devtmpfs的used为:"}{print $3}'
devtmpfs的used为:0

【$0 输出当前整行内容】
[root@VM_0_3_centos wulei]# echo "scale=2;0.13+0.4" | bc
.53
[root@VM_0_3_centos wulei]# echo "scale=2;0.13+0.4" | bc | awk '{printf "%.3f", $0}'
0.530[root@VM_0_3_centos wulei]# 

【输出指定行的指定列】
[root@VM_0_3_centos wulei]# cat wulei.sh
1.1    1.2    1.3
2.1    2.2    2.3
[root@VM_0_3_centos wulei]# awk '{printf "第三列为"} {print $3}' wulei.sh
第三列为1.3
第三列为2.3
[root@VM_0_3_centos wulei]# grep '^2' wulei.sh | awk '{printf "第2行第2列:"}{print $2}'
第2行第2列:2.2

【-F 指定分割符 (查看指定文件,并以tab键作为分隔符输出第二列)】
[root@VM_0_3_centos wulei]# cat wulei.sh
1.1    1.2    1.3
2.1    2.2    2.3
[root@VM_0_3_centos wulei]# cat wulei.sh | awk -F"\t" '{print $2}'
1.2
2.2

-F"\t"等价于BEGIN {FS="\t"}
[root@VM_0_3_centos wulei]# cat wulei.sh | awk 'BEGIN {FS="\t"}{print $2}'
1.2
2.2

【END 的用法】
[root@VM_0_3_centos wulei]# cat wulei.sh
1.1    1.2    1.3
2.1    2.2    2.3
[root@VM_0_3_centos wulei]# cat wulei.sh | awk '{printf "第二列:"}{print $2}'
第二列:1.2
第二列:2.2
[root@VM_0_3_centos wulei]# cat wulei.sh | awk '{printf "第二列:"}{print $2} END {print "以上为所有结果\n"}'
第二列:1.2
第二列:2.2
以上为所有结果

【NR 指定行号】
[root@VM_0_3_centos wulei]# cat wulei.sh
1.1    1.2    1.3
2.1    2.2    2.3
3.1    3.2    3.3
4.1    4.2    4.3
5.1    5.2    5.3
[root@VM_0_3_centos wulei]# awk 'NR==2 {print $2}' wulei.sh
2.2
[root@VM_0_3_centos wulei]# awk '(NR>=2 && NR<5) {print $2}' wulei.sh
2.2
3.2
4.2
awk对列提取
sed的应用场景:主要对数据进行处理(选取,新增,替换,删除,搜索)

    sed语法:sed [选项] [动作] 文件名
    常见的选项与参数:

        -n     #把匹配到的行输出打印到屏幕
        p     #以行为单位进行查询,通常与-n一起使用
  
        d     #删除指定行显示

        a     #在行的下面插入新的内容显示

        i     #在行的上面插入新的内容显示

        c     #替换指定行显示
        
        s/旧内容/新内容/g  #指定内容进行替换展示
            sed 's/0%/100%/g' wulei.sh

        -i  #对源文件进行修改(高危操作,慎用,用之前需要备份源文件)

        -e     #表示可以执行多条动作
            eg:cat -n wulei.sh | sed -n -e 's/100%/新内容/g' -e '/新内容/p'
            
【 -n p 查看指定行】
[root@VM_0_3_centos wulei]# df -m 
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# df -m | sed -n '2p'
/dev/vda1          50268  2034     45982   5% /

【搜索】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   100% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   100% /sys/fs/cgroup
tmpfs                100     0       100   100% /run/user/0
[root@VM_0_3_centos wulei]# sed -n '/100%/p' wulei.sh
devtmpfs             487     0       487   100% /dev
tmpfs                497     0       497   100% /sys/fs/cgroup
tmpfs                100     0       100   100% /run/user/0
 
【 d 不显示指定行】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# sed '2d' wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0

【 a 插入显示】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# sed '2a 吴磊' wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
吴磊
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]#

【 i 插入显示】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# sed '4i 6666666666666' wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
6666666666666
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0

【 c 替换指定行显示】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# sed '2c 吴磊吴磊吴磊' wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
吴磊吴磊吴磊
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0

【 s 指定内容进行替换展示】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# sed 's/0%/100%/g' wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   100% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   100% /sys/fs/cgroup
tmpfs                100     0       100   100% /run/user/0
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0

【 -i 修改源文件】
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   0% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   0% /sys/fs/cgroup
tmpfs                100     0       100   0% /run/user/0
[root@VM_0_3_centos wulei]# sed -i 's/0%/100%/g' wulei.sh
[root@VM_0_3_centos wulei]# cat wulei.sh
Filesystem     1M-blocks  Used Available Use% Mounted on
/dev/vda1          50268  2034     45982   5% /
devtmpfs             487     0       487   100% /dev
tmpfs                497     1       497   1% /dev/shm
tmpfs                497     1       496   1% /run
tmpfs                497     0       497   100% /sys/fs/cgroup
tmpfs                100     0       100   100% /run/user/0
 
【 -e 执行多条命令 (查看文件并输出行号,将结果传给sed命令,替换指定内容后 再展示出来)】
[root@VM_0_3_centos wulei]# cat -n wulei.sh | sed -n -e 's/100%/新内容/g' -e '/新内容/p'
     3    devtmpfs             487     0       487   新内容 /dev
     6    tmpfs                497     0       497   新内容 /sys/fs/cgroup
     7    tmpfs                100     0       100   新内容 /run/user/0
[root@VM_0_3_centos wulei]# cat -n wulei.sh
     1    Filesystem     1M-blocks  Used Available Use% Mounted on
     2    /dev/vda1          50268  2034     45982   5% /
     3    devtmpfs             487     0       487   100% /dev
     4    tmpfs                497     1       497   1% /dev/shm
     5    tmpfs                497     1       496   1% /run
     6    tmpfs                497     0       497   100% /sys/fs/cgroup
     7    tmpfs                100     0       100   100% /run/user/0

     
sed 对数据进行处理

if、for、case、while分支循环函数

if 分支判断
    语法:
    (1)单个判断(单分支循环):

            if [ 条件判断 ];
                then
                执行动作
            fi2if [ 条件判断 ];
                then
                执行动作
            else
                执行动作
            fi3)多个判断(多分支循环):

            if [条件判断];
                then
                执行动作
            elif [条件判断];
                then
                执行动作
            elif [条件判断];
                then
                执行动作
            fi
            
    【if脚本案例】
    #!/bin/bash
    #《if脚本案例》
    read -p "请输入文件名:" filename
    if [ -e $filename ];
        then
        echo "$filename 文件存在"
    else 
        echo "$filename 文件不存在"
    fi

    read -p "请输入数字:" num
    if [ $num -gt 5 ];
        then
        echo "$num 大于5"
    elif [ $num -lt 5 ];
        then 
        echo "$num 小于5"
    else
        echo "$num == 5"
    fi

=====================================

case分支判断:case循环常使用于多重分支,与if不同的是,if可以判断多个条件,case一次只能判断一种条件
    语法:
    case 变量 in 

        值1 )
        执行动作1
        ;;

        值2 )
        执行动作2
        ;;

        值3 )
        执行动作3
        ;;
        ....
    esac
    
    【case脚本案例】
    #!/bin/bash
    #《case分支案例》
    read -p "请输入你要查询天气的城市:" city
    case $city in
        '北京')
            echo "北京下雪, 温度 2 ~ -5摄氏度"
        ;;
        '深圳')
        echo "深圳晴天, 温度23 ~ 15摄氏度"
        ;;
        *)
        echo "您的输入地点有误"
    esac

=====================================

for循环控制
    语法:
    (1for 变量名 in 值1 值2 值3
         do
            执行动作
         done2for 变量名 in `命令`
         do
            执行动作    
         done3for ((条件))
         do
            执行动作
         done
    
    【for脚本案例】
    #!/bin/bash
    #《for脚本案例》
    echo "语法1案例"
    for i in 1 2 3 4 5 6 7 8 9 10
    do
        echo "$i"
        sleep 0.1 #休眠0.1秒
    done

    echo "语法2案例" #seq 1 10 会直接打印出1 10
    for i in `seq 1 10`
    do
        echo "$i"
    done

    echo "语法2案例"
    # 现在有这么一个文件,我要ping这些主机是否能够连接(ping -c n 表示ping n次的意思,不然会一直ping)
    # [root@VM_0_3_centos ~]# cat a.txt
    # www.jd.com
    # 192.168.100.100
    # www.baidu.com
    for i in $(cat a.txt)
    do
        ping -c 1 $i 1>/dev/null && echo "$i 能够连接"
        ping -c 1 $i 1>/dev/null || echo "$i 连接失败"
    done

    echo "语法3案例"
    for (( i=1;i<11;i++ ))
    do
        echo "遍历 $i"
    done

=====================================

while 循环
    应用场景:while循环是条件循环也是不定循环,只要条件判断式成立,循环就会一直进行着。
              直到判断式不成立 或者 选择跳出循环 才会结束

    语法结构:
        while [ 条件判断式 ]
        do
            执行动作
        done    
    
    【while脚本案例】
    #!/bin/bash
    #《while脚本》
    n=6
    m=9
    while [ $m -gt $n ]
    do
       echo "n为: $n"
        n=$[ $n + 1 ]
    done
    echo "n = $n end"
if、for ... 指令案例

Linux定时任务

1. 创建脚本
vim /apps/deploy/intelligent-shelf/clear-log.sh

2. 编写脚本内容
echo '' > /apps/logs/intelligent-shelf/catalina.out
echo '' > /apps/logs/wowcolour-shelf/catalina.out

3. 赋予权限
chmod 777 /apps/deploy/intelligent-shelf/clear-log.sh

4. 输入   crontab -e  开始编写定时任务(下面是定时脚本)
0 10 * * *  /apps/deploy/intelligent-shelf/clear-log.sh

5. 重启定时任务
/bin/systemctl restart crond

 

posted @ 2019-03-24 13:38  吴磊的  阅读(260)  评论(0编辑  收藏  举报
//生成目录索引列表