man  test 可以看见这些  
  比较符号:-lt小于 -le小于等于   -gt大于   -ge大于等于  -ne不等于   -eq等于 
            < 小于(需要双括号),如:(("$a" < "$b"))
            <= 小于等于(需要双括号),如:(("$a" <= "$b"))
            > 大于(需要双括号),如:(("$a" > "$b"))
            >= 大于等于(需要双括号),如:(("$a" >= "$b"))  
=或==(需要双括号),如:if [ "$a" == "$b" ]
           -b file            若文件存在且是一个块特殊文件,则为真
           -c file            若文件存在且是一个字符特殊文件,则为真
           -d file            若文件存在且是一个目录,则为真
           -e file            若文件存在,则为真
           -f file            若文件存在且是一个规则文件,则为真
           -g file            若文件存在且设置了SGID位的值,则为真
           -h file            若文件存在且为一个符合链接,则为真
           -k file            若文件存在且设置了"sticky"位的值
           -p file            若文件存在且为一已命名管道,则为真
           -r file            若文件存在且可读,则为真
           -s file            若文件存在且其大小大于零,则为真
           -u file            若文件存在且设置了SUID位,则为真
           -x file            若文件存在且可执行,则为真
           -o file            若文件存在且被有效用户ID所拥有,则为真
   -z string          若string长度为0,则为真
           -n string          若string长度不为0,则为真
           string1 = string2  若两个字符串相等,则为真
           string1 != string2 若两个字符串不相等,则为真
    
if  then else语句:
 if 条件 1
    then 命令1
 elif  条件 2
     then  命令2
 else   
      命令3
 fi 完成
   如果if和then在同一行那命令格式为 if 条件1;then
 eg:
#####vim name.sh
#!/bin/bash
#name.sh
echo -n "Enter you name:"
read NAME
if [ "$NAME" == " " ]; then
   echo "you did not enter you name"
else
   echo "you name is: $NAME"
fi
####保存退出,chmod +x name.sh
#### 运行 ./name.sh
[root@localhost ~]# ./name.sh 
Enter you name:tony (这个名字你是输入的)
you name is: tony
 
eg:copy一个文件,如果文件不存在会提示系统错误的信息,和提示自己给的信息
####vim ifcp.sh
#!/bin/bash
#ifcp.sh
if cp test1.txt myfile.txt; then
   echo "copy is successful"
else
   echo "`basename $0`:no such test1.txt file" >&2
fi
####保存退出,chmod +x ifcp.sh
####运行 ./ifcp.sh  -n (-n参数可以检查脚本是否有语法错误)
[root@localhost ~]# ./ifcp.sh 
cp: cannot stat `test1.txt': No such file or directory
ifcp.sh:no such test1.txt file
 
eg:copy一个文件,文件不存在系统提示的信息不显示在屏幕上,显示提示自己给的信息
####vim ifcp.sh
#!/bin/bash
#ifcp.sh
if cp test1.txt myfile.txt 2>/dev/null; then
   echo "copy is successful"
else
   echo "`basename $0`:no such test1.txt file" >&2
fi
####保存退出,chmod +x ifcp.sh
####运行 ./ifcp.sh
[root@localhost ~]# ./ifcp.sh 
ifcp.sh:no such test1.txt file
 
eg:copy一个文件,文件存在则提示copy is successful
####vim ifcp.sh
#!/bin/bash
#ifcp.sh
if cp 1.txt myfile.txt 2>/dev/null; then
   echo "copy is successful"
else
   echo "`basename $0`:no such test1.txt file" 
fi
####保存退出,chmod +x ifcp.sh
####运行 ./ifcp.sh
[root@localhost ~]# ./ifcp.sh 
copy is successful
[root@localhost ~]# cat myfile.txt 
the end
解释:`bsename $0`值显示当前脚本或命令的名字,$0显示会包括当前脚本或命令的路径
       >&2重定向到标准错误,输出到屏幕上
 
eg:一个if---elif---elif--else的语句, -z的参数不知道是什么意思,自己可以man test查看一下,注意空格和分号,引号
#####vim  ifelse.sh
#!/bin/bash
#ifelse.sh
echo -n "Enter your name:"
read NAME
if [ -z $NAME ] || [ "$NAME" = " " ];then
   echo "you did not enter a name"
elif [ "$NAME" = "root" ];then
   echo "Hello root"
elif [ "$NAME" = "tony" ];then
   echo "Hello tony"
else
   echo "hi,$NAME"
fi
####保存退出,chmod +x ifelse.sh
####运行 ./ifelse.sh
[root@localhost ~]# ./ifelse.sh 
Enter your name:root
Hello root
[root@localhost ~]# ./ifelse.sh 
Enter your name:tony
Hello tony
[root@localhost ~]# ./ifelse.sh 
Enter your name:jie
hi,jie
 
case语句:
   case值 in
   模式1)
      命令1
  ;;
   模式2)
      命令2
  ;;
  esac
   case取值后面必须为单词in,每一模式必须以右括号结束。取值可以为变量或常数,匹配发现取值符合某一模式后,期间
 所有命令开始执行直至;;.模式匹配符合*表示任意字符,?表示任意单字符,[..]表示类或范围中任意字符
 
eg:
######vim case.sh
#!/bin/bash
#case.sh
echo -n "Enter a number from 1 to 3:"
read ANS
case $ANS in
   1)
      echo "you select 1"
      ;;
   2)
     echo "you select 2"
     ;;
   3)
    echo "you select 3"
    ;;
   *)
    echo "`basename $0`:this is not between 1 and 3 ">&2
    exit
    ;;
esac
#####保存退出,chmod + case.sh
####运行 ./case.sh
[root@localhost ~]# ./case.sh 
Enter a number from 1 to 3:1
you select 1
[root@localhost ~]# ./case.sh 
Enter a number from 1 to 3:2
you select 2
[root@localhost ~]# ./case.sh 
Enter a number from 1 to 3:3
you select 3
[root@localhost ~]# ./case.sh 
Enter a number from 1 to 3:5
case.sh:this is not between 1 and 3 
 
for循环:
   for 变量名 in 列表
   do  
         命令1
 命令2
   done  
   当变量值在列表里,for循环即执行一次所有命令,使用变量名访问列表中取值,命令可为任何有效的shell命令和语句,变量名
为任何单词,in列表用法是可选的,如果不用它,for循环使用命令行的位置参数。in列表可以包含替换,字符串和文件名。
 
eg:in后面的参数为一个列表
#####vim for1.sh
#!/bin/bash
#for1.sh
for loop in 1 2 3 4 5
do
   echo $loop
done
####保存退出,chmod +x for1.sh
####运行./for1.sh
[root@localhost ~]# ./for1.sh 
1
2
3
4
5
eg:in后面的参数为一个字符串
#####vim for2.sh
#for2.sh
for loop in "orange red bue grey"
do
  echo $loop“
done
####保存退出,chmod +x for2.sh
####运行./for2.sh
[root@localhost ~]# ./for2.sh 
orange red bue grey
把for2.sh里面的内容for loop in "orange red bue grey"  改成for loop in orange red bue greyz则in后面的分行显示
 
eg:in后面的参数为一个命令,``反引号里面的是系统的命令
#####vim for3.sh
#!/bin/bash
#for3.sh
for jie in `cat myfile.txt`
do
    echo $jie
done
####保存退出,chmod +x for3.sh   
[root@localhost ~]# cat myfile.txt 
the end
[root@localhost ~]# ./for3.sh    
the
end
 
eg:一个for和if结合的列子
####vim for4.sh
 
#!/bin/bash
#for4.sh
echo "zhe li mian end you yi ge end" >myfile.txt
for JIE in `cat myfile.txt`
do
    if [ "$JIE" = "end" ];then
       echo "it is:$JIE"
    else
       echo "it is not end,it is:$JIE"
    fi
done
#####保存退出,chmod +x for4.sh
####运行./for4.sh
[root@localhost ~]# ./for4.sh 
it is not end,it is:zhe
it is not end,it is:li
it is not end,it is:mian
it is:end
it is not end,it is:you
it is not end,it is:yi
it is not end,it is:ge
it is:end
 
until循环:
   until 条件
   do 
       命令1
   命令2
   ...
   done
条件可以为任意测试条件,测试发生在循环末尾,因此循环至少执行一次
 
eg:检查磁盘空间的大小,每隔300s检查磁盘空间,超过指定的数字就发邮件给root用户
######vim until.sh
#!/bin/bash
#until.sh
Part="/home"
LOOK_OUT=`df | grep "$Part" | awk '{print $5}'| sed 's/%//g'`
echo $LOOK_OUT
until [ " $LOOK_OUT" -gt "90" ]
do
   echo "this Filesystem is empty" |mail root
   LOOK_OUT=`df | grep "$Part" | awk '{print $5}'| sed 's/%//g'`
     sleep 300
done   
#####保存退出,chmod +x until.sh
####运行./until.sh
 
while循环:
      while 命令
      do
   命令1
   命令2
   ...
  done
 在while和都之间虽然通常指使用一个命令,但可以放几个命令,命令通常用作测试条件 
 
eg:
######vim while.sh
#!/bin/bash
#while.sh
NAME=name.txt
if [  -e "$NAME"  ];then
      echo -e "zhui jia \n jin qu \n yi juhua " >> $NAME
    else
       touch $NAME
      echo -e "zhe ge wen jian \n shi xin \n jian de " > $NAME
fi
while read LINE
do
     echo $LINE 
done < $NAME
######保存退出,chmod +x while.sh
####运行 ./while.sh
if [  -e "$NAME"  ]    //判断这个文件有木有,若果有则会追加一句话,没有则会新建一个文件,然后会添加一句话
然后通过循环把他显示输出,如果没有这个文件,运行第一遍则只会出现echo -e "zhe ge wen jian \n shi xin \n jian de " > $NAME
这个里面的,如果运行第二遍,则 echo -e "zhe ge wen jian \n shi xin \n jian de " > $NAME会显示一次,然后
echo -e "zhui jia \n jin qu \n yi juhua " >> $NAME会输入一次,运行第三遍,则echo -e "zhui jia \n jin qu \n yi juhua " >> $NAME             
会显示更多遍
 
break控制:
  退出循环,如果是在一个嵌入循环里,可以指定n来跳出循环的个数,
eg:
######vim break.sh
#!/bin/bash
#break.sh
while :
do
     echo -n "Enter any number [  1...5 ]:"
     read  ANS
   case  $ANS in
     1|2|3|4|5)
        echo "Your enter a number between 1 and 5."
        ;;
     *)
        echo "Wrong number,bye."
        break
        ;;
    esac
done
######保存退出,chmod +x break.sh
####运行 ./break.sh
[root@localhost ~]# ./break.sh 
Enter any number [  1...5 ]:1
Your enter a number between 1 and 5.
Enter any number [  1...5 ]:3
Your enter a number between 1 and 5.
Enter any number [  1...5 ]:7
Wrong number,bye.
解释:while : ,while后面接一个: 表示while语句永远为真,用break跳出循环。
 
continue控制:
   跳过循环步
 
eg:
#####vim breakcontinue.sh 
#!/bin/bash
#break.sh
while :
do
     echo -n "Enter any number [  1...5 ]:"
     read  ANS
   case  $ANS in
     1|2|3|4|5)
        echo "Your enter a number between 1 and 5."
        ;;
     *)
        echo -n "Wrong number,continue(y/n?)."
        read IS_CONTINUE
        case $IS_CONTINUE in
             y|yes|Y|Yes)
                 continue;
                 ;;
              *) break
                 ;;
        esac
        ;;
    esac
done
######保存退出, chmod +x breakcontinue.sh 
#####运行, ./breakcontine.sh
[root@localhost ~]# ./breakcontinue.sh 
Enter any number [  1...5 ]:3
Your enter a number between 1 and 5.
Enter any number [  1...5 ]:7
Wrong number,continue(y/n?).y
Enter any number [  1...5 ]:6
Wrong number,continue(y/n?).n   
 
vim check_server.sh
####
#!/bin/bash
echo "this script will to find which service have started"
 
#to find www service
testing=`netstat -tlun | grep ":80"`
if [ -n "$testing" ];then                ##if no null is true
    echo "WWW server has started!"
fi
 
#to find vsftpd service
testing=`netstat -tlun | grep ":21"`
if [ "$testing" != "" ];then            ###if no null is true
    echo "vsftpd server has started!"
fi
 
#to find ssh service
testing=`netstat -tlun | grep ":22"`
if [ -n "$testing" ];then
    echo "SSH server has started!"
fi
 
#to find mail service
testing=`netstat -tlun | grep ":25"`
if [ "$testing" != ""  ];then
    echo "MAIL server has started!"
fi
 
#####
 
 
 
function功能
 
格式:
function fname()
{
  程序段
}
function的设定一定要在程序的最前面
拥有内建变量,$0表示函数名称,后续接的变量标记为$1,$2,$3....
 
vim func.sh
###
#!/bin/bash
function printinfo()
{
    echo "you choice is"
}
case $1 in
    "one")
printinfo;echo $1 | tr -s 'a-z' 'A-Z'
;;
    "two")
        printinfo;echo $1 | tr -s 'a-z' 'A-z'
        ;;
esac  
####
 
 
 
shell脚本实现1+2+...+100
vim sum.sh
####
#!/bin/bash
i=0
s=0
while [ "$i" -lt 100 ]
do
    i=$(($i+1))
    s=$(($s+$i))
done
echo "1+2+3+...+$i=$s"
####   
 
 
vim sum1.sh
####
#!/bin/bash
s=0
for ((i=0;i<=100;i++))
do
    s=$(($s+$i))
done
echo "1+2+..+100=$s"
echo "i=$i"
####
 
for的另一种格式
 
vim for.sh
####
#!/bin/bash
for animal in cat dog pig
do
        case $animal in
                "cat")
                        echo "$animal miao miao jiao"
                        ;;
                "dog")
                        echo "$animal wang wang jiao"
                        ;;
                "pig")
                        echo "$animal luo luo jiao"
                        ;;
                "*")
                        echo "$animal jiao mei jiao"
                        ;;
        esac
done
####

shell控制流结构笔记的更多相关文章

  1. 3.3 shell控制流结构

    shell中的控制流包括if then else语句,case语句,for循环,until循环,while循环,break控制,continue控制. 条件测试: 有时判断字符串是否相等或检查文件状态 ...

  2. shell中的控制流结构

    shell中的控制流结构 1.if...then..else..fi语句 2.case语句 3.for循环 4.until 语句 5.while循环 6.break控制 7.continue 控制 1 ...

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

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

  4. 黑马程序员——JAVA基础之程序控制流结构之判断结构,选择结构

    ------- android培训.java培训.期待与您交流! ---------- 程序控制流结构:顺序结构:判断结构:选择结构:循环结构. 判断结构:条件表达式无论写成什么样子,只看最终的结构是 ...

  5. Shell脚本、Shell脚本结构、date命令的用法、变量

    1.Shell脚本: shell是一种脚本语言 目的:可以实现自动化运维,能大大增加运维的效率.2.Shell脚本结构:   #!/bin/bash  以#!/bin/bash开头,即以/bin/ba ...

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

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

  7. 用call/cc合成所有的控制流结构

    用call/cc合成所有的控制流结构 来源 https://www.jianshu.com/p/e860f95cad51 call/cc 是非常.非常特殊的,因为它根本无法用 Lambda 演算定义. ...

  8. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  9. shell脚本介绍、shell脚本结构和执行、date命令用法、shell脚本中的变量

    7月11日任务 20.1 shell脚本介绍20.2 shell脚本结构和执行20.3 date命令用法20.4 shell脚本中的变量 20.1 shell脚本介绍 1.shell脚本语言是linu ...

随机推荐

  1. return 的用法 初探

    #include<stdio.h> int imin(int ,int ); int main() { int evil1,evil2; ) //注意 第二个%d后面不能有空格,大概这就是 ...

  2. sql 存储过程参数是表类型,数据库中如何调用

    DECLARE @NEW_STUDENT as [CancelLendersContent] INSERT @NEW_STUDENT VALUES (0,0,0,'12345678912','张三', ...

  3. 【crunch bang】 tint2-用来控制桌面的布局

    tint2配置: #--------------------------------------------- # TINT2 CONFIG FILE #----------------------- ...

  4. DataTables使用学习记录

    导入 <link rel="stylesheet" type="text/css" href="DataTables-1.10.12/media ...

  5. EL表达式,JSTL:jsp standard Tag Library

    1.EL表达式的作用: 1.1访问Bean的属性.  方式一:${对象名 . 属性名} eg:${user.name}    方式二:${对象名["属性名"]} 1.2输出简单的运 ...

  6. 161205、win10安装mysql5.7.16数据库

    1.下载mysqlk数据库http://dev.mysql.com/downloads/file/?id=467269 2.解压到本地目录 3.复制一份my-default.ini 修改名称为my.i ...

  7. scala特质

    package com.ming.test /** * scala 特质,类似与java接口,但是比java接口强大,可以有实现方法,定义字段之类的 */ /** * 定义一个日志的特质 */ tra ...

  8. hadoop概述测试题和基础模版代码

    hadoop概述测试题和基础模版代码 1.Hadoop的创始人是DougCutting?() A.正确 B.错误答对了!正确答案:A解析:参考课程里的文档,这个就不解释了2.下列有关Hadoop的说法 ...

  9. E2PROM与Flash的引脚图

    E2PROM(24C02):

  10. HTML5与移动端Web

    概述 HTML5 提供了很多新的功能,主要有: 新的 HTML 元素,例如 section, nav, header, footer, article 等 用于绘画的 Canvas 元素 用于多媒体播 ...