shell编程

来源:互联网 发布:欧陆风云4 mac 汉化 编辑:程序博客网 时间:2024/06/06 04:44
#!/bin/sh
#auto mail for system info

/bin/date +%F >> /tmp/sysinfo
echo "disk info:" >> /tmp/sysinfo
/bin/df -h >> /tmp/sysinfo
echo >> /tmp/sysinfo
echo "online users:" >> /tmp/sysinfo
/usr/bin/who | /bin/grep -v root >> /tmp/sysinfo
echo >> /tmp/sysinfo
echo "memory info:" >> /tmp/sysinfo
/usr/bin/free -m >> /tmp/sysinfo
echo >> /tmp/sysinfo

#write root
/usr/bin/write xiaobai < /tmp/sysinfo && /bin/rm /tmp/sysinfo


test.apache文件
      1 #!/bin/sh
      2 # "if...else" usage
      3 # Using this program to show your system's services
      4
      5 echo "Now, the web services of this Linux system will to detect..."
      6 echo
      7
      8 # Detect www service
      9    web=`/usr/bin/pgrep httpd`
     10    if [ "$web" != "" ]
     11    then
     12        echo "The Web service is running."
     13    else
     14        echo "The Web service is NOT running."
     15        /etc/rc.d/init.d/httpd start
     16    fi

if_else文件
      1 #!/bin/sh
      2
      3 echo "please input a file name: "
      4 read file_name
      5 if [ -d $file_name ]
      6     then
      7     echo "$file_name is a directory"
      8 elif [ -f $file_name ]
      9     then
     10     echo "$file_name is common file"
     11 elif [ -c $file_name -o -b $file_name ]
     12     then
     13     echo "$file_name is a device file"
     14 else
     15     echo "$file_name is an unknown file"
     16 fi

test.sh文件
      1 #!/bin/sh
      2 if [ $# -ne 2 ];then
      3     echo "Not enough parameters"
      4     exit 0
      5 fi
    
for文件
      1 #!/bin/sh
      2
      3 for DAY in Sunday Monday Tuesday Wednesday Tursday Friday Saturday
      4 do
      5  echo "The day is : $DAY"
      6 done
    
userinfo.sh文件
      1 #!/bin/sh
      2 # display user's info
      3
      4 /bin/echo "Please input the username"
      5 read username
      6 /bin/grep $username /etc/passwd > /dev/null 2> /dev/null
      7 if [ $? -eq 0 ]
      8    then
      9         /bin/echo "username is : $username"
     10    else
     11        /bin/echo  "user $username does not exist"
     12        exit 1
     13 fi
     14 /bin/echo
     15
     16 # list /etc/passwd info
     17 userinfo=`/bin/grep ^$username:x /etc/passwd`
     18 userid=`/bin/echo $userinfo | /bin/awk -F: '{print $3}'`
     19 groupid=`/bin/echo $userinfo | /bin/awk -F : '{print $4}'`
     20 homedir=`/bin/echo $userinfo | /bin/awk -F : '{print $6}'`
     21 shell=`/bin/echo $userinfo | /bin/awk -F : '{print $7}'`
     22
     23 # get group name from GID
     24 grouptmpname=`cat /etc/group | /bin/grep :x:$groupid`
     25 groupname=`/bin/echo $grouptmpname | /bin/awk -F : '{print $1}'`
     26 /bin/echo "user id is : $userid"
     27 /bin/echo "default group is : $groupname"
     28 /bin/echo "home is : $homedir"
     29 /bin/echo "shell is : $shell"
     30 /bin/echo "group members infos:"
     31
     32 # get group members
     33 groups=`/usr/bin/groups $username`
     34 /bin/echo $groups
     35 /bin/echo
     36
     37 #get login info
     38 userlogin=`/usr/bin/who | /bin/grep $username`
     39 if [ "$userlogin" != "" ]
     40 then
     41     /bin/echo "$username is online"
     42 else
     43     /bin/echo "$username NOT logged in"
     44 fi
    
killuser.sh文件
      1 #!/bin/sh
      2 # The script to kill logined user.
      3
      4 username="$1"
      5
      6 /bin/ps aux | /bin/grep $username | /bin/awk '{print $2}' > /tmp/temp.pid
      7
      8 killid=`cat /tmp/temp.pid`
      9
     10 for PID in $killid
     11 do
     12     /bin/kill -9 $PID 2> /dev/null
     13 done
    
autobak.sh文件
      1 #!/bin/sh
      2 # backup files by date
      3
      4 DATE=`/bin/date +%Y%m%d`
      5 /bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>>/backup/$1.bak.log
      6 /bin/gzip /backup/$1.$DATE.tar
      7 if [ $? -eq 0 ]
      8 then
      9     echo "$1 $DATE backup successfully" >> /backup/$1.bak.log
     10 else
     11     echo "ERROR:failure $1 $DATE backup!" >> /backup/$1.bak.log
     12 fi
     13
     14 # crontab -e
     15 # 0 3 * * 2,5 script
    
    
-c表示字符设备
-b表示块设备
[root@localhost ~]# ls -l /dev/tty
crw-rw-rw-. 1 root tty 5, 0 Jan 31 21:09 /dev/tty
[root@localhost ~]# ls -l /dev/sda
brw-rw----. 1 root disk 8, 0 Jan 31 21:10 /dev/sda

文件提取awk
awk -F: '$3==0 {print $1}' /etc/passwd
awk -F: 'length($2)==0 {print $1}' /etc/passwd
    
多个条件的联合
-a 与
-o 或

-eq =
-ge >=
-gt >
-le <=
-lt <
-ne !=


select文件
      1 #!/bin/sh
      2 # "select" Usage
      3
      4 echo "What is your favouriter OS?"
      5
      6 select var in "Linux" "UNIX" "Windows" "Others"
      7 do
      8     break
      9 done
     10
     11 echo "Your have selected $var"


case文件
      1 #!/bin/sh
      2
      3 echo "###################"
      4 echo "Please select your operation"
      5 echo " Please "C" to copy"
      6 echo " Please "D" to Delete"
      7 echo " Please "B" to Backup"
      8 echo "####################"
      9 read op
     10 case $op in
     11      C)
     12        echo "Your selection is Copy"
     13      ;;
     14      D)
     15        echo "Your selection is Delete"
     16      ;;
     17      B)
     18        echo "Your selection is Backup"
     19      ;;
     20      *)
     21        echo "invalide selection"
     22 esac

select.case文件
      1 #!/bin/bash
      2 # "select" "case" Usage
      3
      4 echo "a is 5,b is 3. Please select you method: "
      5
      6 a=5
      7 b=3
      8
      9 select var in "a+b" "a-b" "a*b" "a/b"
     10 do
     11     break
     12 done
     13
     14 case $var in
     15    "a+b") echo 'a+b='`expr $a "+" $b`;;
     16    "a-b") echo 'a-b='`expr $a "-" $b`;;
     17    "a*b") echo 'a*b='`expr $a "*" $b`;;
     18    "a/b") echo 'a/b='`expr $a "/" $b`;;
     19     *) echo "input error..."
     20 esac

while.sh文件
      1 while [ -d /etc ]
      2 do
      3     ls -ld /etc
      4     break
      5 done

while文件
      1 #!/bin/sh
      2
      3 num=1
      4 while [ $num -le 10 ]
      5 do
      6    SUM=`expr $num \* $num`
      7    echo $SUM
      8    num=`expr $num \+ 1`
      9 done

useradd.sh文件
      1 #!/bin/sh
      2 # Author:xiaobai
      3 # The script to add user
      4
      5 # /etc/passwd info
      6 echo "Please input username:"
      7 read name
      8 echo "Please input number:"
      9 read num
     10 n=1
     11 while [ $n -le $num ]
     12 do
     13     /usr/sbin/useradd $name$n
     14     n=`expr $n + 1`
     15 done
     16
     17 # /etc/shadow info
     18 echo "Please input the password:"
     19 read passwd
     20 m=1
     21 while [ $m -le $num ]
     22 do
     23     echo $passwd | /usr/bin/passwd --stdin $name$m
     24     m=`expr $m + 1`
     25 done

deluser.sh文件
      1 #!/bin/sh
      2 echo "please input username:"
      3 read name
      4 echo "please input number"
      5 read num
      6
      7 sum=0
      8 while [ $sum -lt $num ]
      9 do
     10    sum=`expr $sum + 1`
     11    /usr/sbin/userdel -r $name$sum
     12 done
    
until文件    
      1 #!/bin/sh
      2
      3 until [ -x /etc/inittab ]
      4 do
      5     /bin/ls -l /etc/inittab
      6     exit 0
      7 done

read.until文件
      1 #!/bin/bash
      2 # "read" "until" usage
      3
      4 echo "Please Y/y to stop..."
      5
      6 read input
      7
      8 until [ "$input" = "Y" ] || [ "$input" = "y" ]
      9 do
     10     echo "error input ,please try again..."
     11     read input
     12 done
     13
     14 echo "Stop here!"

break 文件
      1 #!/bin/sh
      2
      3 while true
      4 do
      5     echo "*******************"
      6     echo "Please select your operation"
      7     echo " 1 Copy"
      8     echo " 2 Delete"
      9     echo " 3 Backup"
     10     echo " 4 Quit"
     11     echo "*******************"
     12     read op
     13 case $op in
     14     1)
     15       echo "Your selection is Copy"
     16       ;;
     17     2)
     18       echo "Your selection is Delete"
     19       ;;
     20     3)
     21       echo "Your selection is Backup"
     22      ;;
     23     4)
     24       echo "Exit ..."
     25           break
     26      ;;
     27     *)
     28      echo "invalide selection,please tyr again"
     29          continue
     30    esac
     31 done


shift文件
       1 #!/bin/sh
      2
      3 if [ $# -le 0 ]
      4 then
      5     echo "Not enough parameters"
      6     exit 0
      7 fi
      8 sum=0
      9 while [ $# -gt 0 ]
     10 do
     11    sum=`expr $sum + $1`
     12    shift
     13 done
     14 echo $sum
    
function文件
      1 HELP()
      2 {
      3    echo "Usage: sh function \$1 \$2 \$3"
      4 }
      5
      6 if [ $# -ne 3 ]
      7 then
      8     HELP
      9 else
     10     echo "thank for your input , the three arguments is 1 2 3."
     11 fi

sh 脚本
1.对脚本有r权限
2.对脚本所在目录有rx权限

./脚本
1.对脚本有rx权限
2.对脚本所在目录有rx权限

setuid.sh文件
      1 #!/bin/sh
      2 # After the system installed, please check setuid files first for security.
      3 # mkdir /backup
      4 # find / -perm -4000 -o -perm -2000 > /backup/setuid.list 2> /dev/null
      5
      6 /usr/bin/find  / -perm -4000 -o -perm -2000 > /tmp/setuid.check 2> /dev/null
      7
      8 for file in `/bin/cat /tmp/setuid.check`
      9 do
     10     /bin/grep $file /backup/setuid.list > /dev/null 2>/dev/null
     11         if [ "$?" != "0" ]
     12         then
     13             echo "$file isn't in lis! it's danger!!"
     14         fi
     15 done
     16

     17 /bin/rm /tmp/setuid.check


监控apache服务脚本

#!/bin/bash
#http.sh
/usr/bin/nc -w2 192.168.10.1 80
if [ $? -ne 0 ]
then 
echo "httpd is error"|mail -s "httpd is down" root@localhost
fi


硬盘报警监控脚本

#!/bin/bash
#disk.sh

dnum=`df |awk 'NR==3{print int($4)}'`
if [ $dnum -gt 20 ]
then
echo "the disk is greater than 20%,now the disk spare is ${dnum}%"|mail -s "disk greater than 20%" root@localhost
fi

原创粉丝点击