Linux——shell简单学习(二)

流控制语句:

  for…done语句

  格式:for  变量   in   名字表

     do

       命令列表

     done

  例子:

  

#!/bin/sh



for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday

do

echo "The day is : $DAY"

done

  

select  变量 in 关键字

do

  command 1

  ... ...

  command n

done

select把关键字中的每一项做成类似表单,以交互的

方式执行do和done之间的命令。

case…esac语句,格式:

  case  变量   in

  字符串1)    命令列表1

  ;;

  ...

  字符串n)    命令列表n

  ;;

  esac

while语句,格式:

  while  条件

  do

    命令

  done

#! /bin/sh



num=1



while [ $num -le 10 ]



do



SUM=`expr $num \* $num`



echo $SUM



num=`expr $num + 1`



done

  

until语句,格式:

  until  条件

  do

    命令

  done

until类似while循环,不同的是until是条件返回值为假时才继续执行。

break:跳出整个循环

continue:跳过本次循环,进行下次循环

shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数不再可用

#! /bin/sh



if  [ $# -le 0 ]

then



echo "Not enough parameters"

exit 0



fi



sum=0



while [ $# -gt 0 ]

do



	sum=`expr $sum + $1`

	shift

done



echo $sum

  

函数的定义:

  

函数名 ()

{

  命令序列

}

函数的调用:不带()

函数名   参数1    参数2 …

函数中的变量:

  变量均为全局变量,没有局部变量

  函数中的参数:调用函数时,可以传递参数,在函数中用$1、$2…来引用

sh -x script这将执行该脚本并显示所有变量的值。

sh -n script不执行脚本只是检查语法的模式,将返回所有语法错误。

 

awk命令应用:

  awk -F 域分隔符 ‘命令’

   示例:

  1、检测系统中UID为0的用户:awk -F: '$3==0 {print $1}' /etc/passwd   F后边的符号表示分割符,默认为空格

  2、检测系统中密码为空的用户:awk -F: 'length($2)==0 {print $1}' /etc/shadow

  

输入文件名,然后进行压缩备份:

1 #!/bin/sh

      2 #back 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

      8 if [ $? -eq 0 ]

      9 then

     10         echo "$1 $DATE backup successfully "

     11 else

     12         echo "ERROR failture $1 $DATE backup"

     13 fi

  

查看apache 服务是否启动如果没有启动则启动,否则输出已启动

 #!/bin/sh

      2

      3 echo "now .the web services of this Linux System will be fetect.."

      4 echo

      5

      6 web=`/usr/bin/pgrep httpd`

      7 if [ "$web" != "" ]

      8 then

      9         echo " the web services is running"

     10 else

     11         echo "the web services is not runing"

     12         /etc/rc.d/init.d/httpd start

     13 fi

  

查看任意输入用户的信息:

 

 #!/bin/sh

      2

      3 echo "input your name"

      4 read username

      5 /bin/grep $username /etc/passwd > /dev/null 2> /dev/null  #查看用户是否存在

      6

      7 if [ $? -eq 0 ]

      8 then

      9         echo "username is : $username"

     10 else

     11         echo "user does not exit"   #不存在就退出结束程序

     12         exit 1

     13 fi

     14 echo

     15

     16 userinfo=`/bin/grep ^$username:x /etc/passwd `     #得到用户的信息

     17 userid=`/bin/echo $userinfo | /bin/awk -F: '{print $3}'` #取出uid

     18 groupid=`/bin/echo $userinfo | /bin/awk -F: '{print $4}'` #取出gid

     19 homedir=`/bin/echo $userinfo | /bin/awk -F: '{print $6}'` #取出宿主目录

     20 shell=`/bin/echo $userinfo | /bin/awk -F: '{print $7}'`  #取出执行脚本

     21

     22 echo "用户基本信息为:" 

     23 echo "userinfo $userinfo"

     24 echo "userid $userid"

     25 echo "groupid $groupid"

     26 echo "homedir $homedir"

     27 echo "shell $shell"

     28

     29 grouptmpname=`cat /etc/group | /bin/grep :x$groupid`    #取得所在组的名字

     30 groupname=`echo $grouptmpname | /bin/awk -F : '{print $1}'`

     31

     32 echo "用户所在组为 : $groupname"

     33 echo

     34

     35 #get group info

     36 groups=`/usr/bin/groups $username`

     37 echo $groups

     38 echo

     39

     40 #get login info

     41 userlogin=`/usr/bin/who | /bin/grep $username`   #判断用户是否登录

     42 if [ "$userlogin" != "" ]

        then

     45         echo "$username 没有登录"

     46 else

     47         echo "$username 以及登录"

     48 fi

     49



    

  

输入用户名,从登录列表中剔除

 #!/bin/sh

      2

      3 #找出于该用户有关的服务

      4 username=$1

      5 /bin/ps aux | /bin/grep jack | awk '{print $2}' > /tmp/killuser.log

      6

      7 #关闭与该用户有关的服务

      8 killids=`cat /tmp/killuser.log`

      9 for pid in $killids

     10 do

     11         /bin/kill -9 $pid

     12 done

  

 

批量添加用户:

      1 #!/bin/sh

      2

      3 echo "input user name"

      4 read name

      5 echo "input adduse numbers"

      6 read num

      7

      8 #循环控制添加用户

      9 i=0

     10 while [ $i -le $num ]

     11 do

     12         /usr/sbin/useradd $name$i

     13         i=`expr $i + 1`

     14 done

     15

     16

     17 echo "input password "

     18 read password

     19 j=0;

     20 while [ $j -le $num ]

     21 do

     22         echo $password | /usr/bin/passwd --stdin $name$j

     23         j=`expr $j + 1`

     24 done

 批量删除用户:

      1 #!/bin/sh

      2

      3 echo "input del username"

      4 read name

      5 echo "input del number"

      6 read num

      7

      8 i=0

      9 while [ $i -le $num ]

     10 do

     11         /usr/sbin/userdel -r $name$i

     12         i=`expr $i + 1`

     13 done

  

 

 

 

你可能感兴趣的:(linux)