流控制语句:

  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——shell简单学习(二)的更多相关文章

  1. Linux——shell简单学习(一)

    首先来一个小程序,来查看所在目录,以及该目录下的文件 #!/bin/sh # “#!”指定用sh执行shell脚本 #this is to show workstation # “#” 表示注释 ec ...

  2. Linux shell脚本编程(二)

    Linux shell脚本编程(二) 练习:求100以内所有偶数之和; 使用至少三种方法实现; 示例1: #!/bin/bash # declare -i sum=0 #声明一个变量求和,初始值为0 ...

  3. Linux shell 菜鸟学习笔记....

    20171123 Linux shell 基础学习笔记1. shell 的开始 一般是 #!/bin/bash 通过 #! 来唯一指定使用的shell路径 其他的 # 都表示注释.2. shell 的 ...

  4. Linux shell ${}简单用法

    转自:Linux shell ${}简单用法 为了完整起见,我这里再用一些例子加以说明 ${ } 的一些特异功能:假设我们定义了一个变量为:file=/dir1/dir2/dir3/my.file.t ...

  5. linux shell脚本学习笔记一

    一.文件比较运算符-e filename 如果 filename存在,则为真 [ -e /var/log/syslog ]-d filename 如果 filename为目录,则为真 [ -d /tm ...

  6. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  7. Linux shell 重定向学习笔记

    在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读 ...

  8. Linux shell command学习笔记(一)

    Shell的种类有很多种,例如CSH,Bourne Shell,Korn Shell.在现在的大多数Linux发行版中,默认的Shell一般都是Bourne again shell(bash). &l ...

  9. Linux shell简单创建用户脚本

    前面介绍简单的shell编写规则. 现在开始编写一个简单的shell脚本. Linux shell介绍 编写shell脚本    1.创建脚本文件    2.根据需求,编写脚本    3.测试执行脚本 ...

随机推荐

  1. 使用java进行excel读取和写入

    1:添加处理excel的依赖jar包 <!-- 引入poi,解析workbook视图 --> <dependency> <groupId>org.apache.po ...

  2. Flask中'endpoint'(端点)的理解

    翻译整理自Stack Overflow:http://stackoverflow.com/questions/19261833/what-is-an-endpoint-in-flask 原文中用到了m ...

  3. POST—常见的4种提交方式

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中,POST 一般用来向服务端提交数据,本文 ...

  4. Keepalived保证Nginx高可用配置

    Keepalived保证Nginx高可用配置部署环境 keepalived-1.2.18 nginx-1.6.2 VM虚拟机redhat6.5-x64:192.168.1.201.192.168.1. ...

  5. 什么是公网IP、内网IP和NAT转换?

    搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么? 1.引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地 ...

  6. ACM题目————区间覆盖问题

    题目描述 设x1 , x2,... , xn是实直线上的n个点.用固定长度的闭区间覆盖这n个点,至少需要多少个这样的固定长度闭区间?设计解此问题的有效算法,并证明算法的正确性.编程任务:对于给定的实直 ...

  7. OpenCV-跟我一起学数字图像处理之拉普拉斯算子

    https://www.cnblogs.com/german-iris/p/4840647.html Laplace算子和Sobel算子一样,属于空间锐化滤波操作.起本质与前面的Spatial Fil ...

  8. python中的property

    提示:这篇博文参考了两个博客,第一篇博文地址为:https://www.cnblogs.com/Lambda721/p/6132206.html,另一篇博文地址如下:关于python的property ...

  9. Python Web学习笔记之并发编程的孤儿进程与僵尸进程

    1.前言 之前在看<unix环境高级编程>第八章进程时候,提到孤儿进程和僵尸进程,一直对这两个概念比较模糊.今天被人问到什么是孤儿进程和僵尸进程,会带来什么问题,怎么解决,我只停留在概念上 ...

  10. 深入JAVA注解之属性注解

    项目目录结构 实体类: package org.guangsoft.annotation.entity; import java.lang.annotation.ElementType; import ...