shell脚本学习总结

shell学习总结

  • shell的基本命令

(1)、less/more:分页显示文件内容

(2)、head:显示文件头部 head -n 1 头部一行

(3)、tail:显示文件尾部

(4)、file:显示文件类型

(5)、wc:查看文件或统计信息 cat -n /etc/passwd | wc -l 统计passwd文件的行数

(6)、chmod :修改文件和目录的权限 rwx

(7)、chown和:chgrp改变属组和属主

(8)、setuid和getuid:设置用户和组权限位

(9)、acl:设置文件权限 setacl 设置文件权限 getacl 查看文件权限

(10)、sort:文本排序

(11)、uniq:文本去重

(12)、tr:替换

(13)、&:将作业后台运行

(14)、df:文件系统磁盘空间利用率

(15)、find命令的使用:

find . -name ".txt" 查找当前目录下以txt结尾的文件

find . -name "[a-z]*" 查找当前目录下以字母开头的文件

find . -name "hast*" 查找当前目录下以hast开头的文件

find . -perm 755 查找当前目录下属性为755的文件

find -user root 查找当前目录下属主为root的文件

find /var -mtime -5 在/var下找更改时间为5天以内的文件

(16)、linux正则表达式

^linux:以linux开头的行

$php:以php结尾的行

. :匹配任意单字符

.+ :匹配任意多字符   

.* :匹配0个或多个字符

(17)、grep命令的使用:

grep "li qq"*:在所有文件中查找有liqq的文件

grep -c "file" a :在a文件中有多少行匹配到file

grep -n "file" a:在a文件中有多少行匹配到file,同时显示行和行号 grep -i “file”a:在a文件中查找file,不区分大小写

(18)、awk –F  ‘ ’ ‘{print $1}’

表示输出默认分隔符第一个位置上的内容

 

  • shell编程的语法

(1)、shell 开头必须指定bash:#!/bin/bash

(2)、shell 的执行方式:

1. ./1.sh 执行当前目录下的1.sh,1.sh要是可执行文件 修改权限 必须有#!/bin/bash

2. bash /usr/local/1.sh 定义变量 aa=’qqq’ =两侧不能有空格,使用变量 ${aa} 变量赋值可以使用“”或‘’,使用‘’号时,$不能表示变量的值 Shell特殊含义变量 $$ 取当前脚本的进程id,就是pid $0 取当前文件名 $n n是大于0的数字,n是几就是第几个参数 $# 取参数的个数 $* 取所有参数 $? 取最有命令的退出状态,0为没错误

(3)、Shell 运算符

+ - * % 加减乘除

Shell 变量运算 $(()) ,$((4-2)),$(($a-$b))

Shell 关系运算符

-eq等于判断,相等返还true

-ne 不等于判断,不相等返回true

-gt大于判断,如果大于返回true

-lt小于判断,小于返回true

-ge大于等于,返回true

-le 小于等于,返回true

(4)、Shell 布尔运算

!取反,[!false] =true

-o 或运算 , [$a –lt 20 –o $b –gt 100]

-a 与运算,[$a –lt 20 –a $b –gt 100]

(5)、Shell 字符串运算

== 判断两个字符串是否相等,相等返回true [$a ==$b]

!= 两个字符串不相等,返回true [$a != $b]

-z 检测字符串长度是否为0,是返回true [-z $a]

-n 检测字符串长度是否不为0,不为0 返回true [-n $a] Str检测字符串是否为空,不为空返回true ,[$a]

(6)、Shell 文件测试运算符

-d file 检测文件是否是目录文件,是返回true,[-d file]

-f file 检测文件是否普通文件,是返回true

-r file 检测文件是否可读,是返回true

-w file 检测文件是否可修改

-x file 检测文件是否可执行

-s file 检测文件是否问空,文件大小大于0,不为空,返回true -e file 检测文件是否存在,包含目录文件

(7)、shell中echo,printf,test命令

echo -e "ok!\n" -e 开启转义 换行

echo -e "ok \c" 不换行

echo ` ` 反引号 显示命令执行结果

printf "%d %s\n" 1 "abc" 1 abc

printf '%d %s\n' 1 "abc" 1 abc 双引号和单引号结果一样 printf %s abcdef abcdef 没有引号也可以输出

printf %s abc def abc def 指定一个参数可以被重复使用

printf "%s and %d \n" and 0 没有时%s用null表示 %d用0表示

test 和 [ ] 在条件中配合使用

(8)、shell数组

        my_array=(A,B,”C”,D)

       my_array[0]=value0

       获取数组中元素的个数

       $(#my_array[@])

(9)、shell中的流程控制

      a) if else

          if true

          then

          else

          fi

          末尾必须用fi结尾

      b)for

          for i  in   item1  item2  ...

          do

          done

      或  for((;;))

      c)无限循环

          while :

          do

          done

         

          while true

          do

          done

 

          for(( ; ; ))

      d)case

      case $1 in

          1)

             echo $1

             ;;

          *)

             echo “exit”

             ;;

      esac

      case中;;表示break; 结束时需用esac结尾

(10)、函数

     function  fun()  或fun()   函数声明时使用function也可以不使用

  1. 、重定向和管道

      重定向:>   >>   2> <  <<

>:输出重定向到某文件

>>:输出追加到某文件

2>:标准错误重定向到某文件

<:输入重定向到某文件

<

  • 监测cpu和内存的脚本文件

#!/bin/sh

#cpu

while :

do

top -n 1 | head -n 8 |grep -v Mem |grep -v average | grep -v PID > cpu.txt

var1=`cat cpu.txt |grep -i CPU | awk '{print $8}'`

var2=`echo $var1 | awk '{print substr($0,0,length($0)-1)}'`

var3=`echo $var2 | awk '{print int($0)}'`

if [ var3 -lt 50 ]

then

    date >>cpu.log

    echo "warning!!!">>cpu.log

    echo `cat cpu.txt | grep -v idle | awk -F ' 0 ' '{print $2}'`

    echo

fi

sleep 3

done

 

       #!/bin/sh

#mem

while :

do

var1=`cat /proc/meminfo | grep -i MemAvailable | awk ‘{print $2}’`

sleep 5

var2=`cat /proc/meminfo | grep -i MemAvailable | awk ‘{print $2}’`

de=`expr $var1 - $var2 `

if [ $de -gt 5120 ]

then

  echo date >> mem.txt

  echo "warning !!!Memory exception" >> mem.txt

  echo

fi

done

你可能感兴趣的:(shell脚本学习总结)