shell脚本使用教程3
一.shell脚本实战
1.监控CPU
#!/bin/bash
US=$(vmstat |awk 'NR==3{print $13}')
SY=$(vmstat |awk 'NR==3{print $14}')
IDLE=$(vmstat |awk 'NR==3{print $15}')
WAIT=$(vmstat |awk 'NR==3{print $16}')
USE=$(($US+$SY))
echo "cpu用户占用: $US%"
echo "cpu系统占用: $SY%"
echo "cpu空闲:$IDLE%"
echo "cpu等待磁盘IO响应占用:$WAIT%"
2.内存
#!/bin/bash
TOTAL=$(free -m |awk '/Mem/{print $2}')
USE=$(free -m |awk '/Mem/{print $3-$6-$7}')
FREE=$(($TOTAL-$USE))
3.判断设备节点是否存在
一般的普通文件的判断条件是 -f。但对于设备节点等特殊文件那就不行了。必须使用与文件类型或者说设备类型相对应的判断条件才可以。
* -b file = True if the file exists and is block special file.块设备文件存在
* -c file = True if the file exists and is character special file.字符设备文件存在
* -d file = True if the file exists and is a directory.目录文件存在
* -e file = True if the file exists.文件存在
* -f file = True if the file exists and is a regular file普通文件存在
* -g file = True if the file exists and the set-group-id bit is set.文件存在且设置了组标记位
* -k file = True if the files' "sticky" bit is set.
* -L file = True if the file exists and is a symbolic link.文件存在且是个符号文件
* -p file = True if the file exists and is a named pipe.文件存在且是一个命名管道
* -r file = True if the file exists and is readable.文件存在且是可读的
* -s file = True if the file exists and its size is greater than zero.文件存在
参照上面的说明,我们要判断一个文件存在而不管其类型,那么可以使用 -e,如果要同时检查其类型,那么我们可以使用相对应的判断条件。就拿这个朋友的代码来说,应该使用-e或者-b才是正确的。
#!/bin/sh
check_sda_exist() {
echo "Find usb disk......."
if [ -b /dev/sda1 ]; then
echo "Runing mount > /udisk"
else
echo "Runing WLAN......"
fi
echo "Mount usb disk to /udisk Success"
}
check_sda_exist
4.使用方法usage
#! /bin/bash
echo "main.sh runing...."
usage(){
cat << EOF
Usage:./test.sh -m remake -o all
Example:
Optional arguments:
-h
-s
-d
-b
EOF
}
usage
5.grep进程时去除掉本身grep
ps -ef | grep '进程名' | grep -v grep
grep -v grep即去除结果中含有grep的进程。
但是要注意如果你的进程名中本身含有grep也会被忽略。
这时就需要更细致的规则,例如去除条件里加上一个空格:
ps -ef | grep '进程名' | grep -v 'grep '
因为grep进程是以grep+空格开头的,而一般进程不会这样,所以可以区分。
6.确认进程是否起来
#!/bin/sh
media_count=`ps -ef | grep media.codec | grep -v grep | wc -l`
if [ $media_count -eq 1 ]; then
echo "the media.codec process exist"
else
echo "the media.codec process isn't exist"
fi