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