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

  

原文地址:https://www.cnblogs.com/E-star/p/3416220.html