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}’
表示输出默认分隔符第一个位置上的内容
(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也可以不使用
重定向:> >> 2> < <<
>:输出重定向到某文件
>>:输出追加到某文件
2>:标准错误重定向到某文件
<:输入重定向到某文件
< #!/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