shell (二)

一.脚本执行命令和控制语句


1.if语句

vim CS

#! /bin/bash



echo "Please enter PassWord"

read passWord

if [ "$passWord" = "myPassWord" ]

then

         echo "Welcome!!"

else

        echo "Wrong PassWord;"

fi


保存退出设置权限 执行得到

如果输入myPassWord 得到 Welcome!!否则输出wrong PassWord;


2case语句

语法

case  word  in

pattern-1)

           command-1

          ;;

pattern-2)

          command-2

          ;;

         ...

pattern-N)

          command-N

            ;;

esac

变量word逐一通pattern-1到pattern-N的模式进行比较,当找到一个模式是,就紧跟执行后面的命令 commands 如果未找到命令 就什么也不做

另外;;只在case命令中出现  shell一旦遇到该命令就跳转到case语句的最后,


举例子 

其为 opensuse中截取的一段控制 SSH服务器的脚本

#! /bin/bash


case "$1" in

start)

echo -n " Starting SSH daemon"

startproc -f -p $SSHD_PIDFILE $SSHD_BIN $SSHD_OPTS -o "PidFile=$SSHD_PIDFILE"


rc_status -v

    ;;


stop)

echo -n "shutting down SSH daemon"


killproc -p $ SSHD_PIDFILE _TERM $SSHD_BIN

rc_status -v

   ;;


restart)

   $0 stop

   $0 start

 rc_status

;;



二.条件测试

1. if判断的依据

if ./testscript -1

then 

    echo "testscript exit -1"

fi


if ./testscript 0

then 

    echo "testscript exit 0"

fi


if ./testscript 1

then

    echo "testscript exit 1"

fi


if语句实际上判断的是 程序的返回值,返回0表示为真,非0为假


2.test命令和空格的使用

语法

test expr

expr命令式通过test命令可以理解的选项来构建的

如 test “$password"="Terry"

如果两者相等,那么test命令就会返回0,反之返回1 test的同义词为[]

语法为 [expr]

对比三条命令

password=”Terry"

test "$password" = "Terry"

[ "$password" = "Terry" ]

第一条是赋值语句,因此无空格

第二条是条件测试命令 要有空格

第三条是条件测试命令 要有空格

赋值语句中加上空格会导致语法错误

而条件测试命令不加空格也会导致语法错误


shell是一个命令解释器,而不是一门编程语言

test 和[都是实实在在的程序

#! /bin/bash

read password

if [ -z "$password" ]

then

      echo "Please enter the password"

fi

表示用于判断用户的输入是否为空,如果用户什么都没有输入,就显示信息


暂不多讲


三、循环结构

1.while语句

语法

while test—-commands

do

   commands

done


下面用脚本做一个计算1到100得和

#! /bin/bash


sum=0

number=1

while test $number -le 100  //le表示小于或者等于

do

     sum=$[ $sum + $number ]

     let number=$number+1

done

echo "The summary is $sum"

结果为5050

下面计算 1+2+3+。。。。+n的结果

#! /bin/bash


echo -n "Enter a number(>0):"


while read n

do

    sum=0

    count=1

     if [ $n -gt 0 ]

     then 

           while [ $count -le $n ]

           do 

              sum=$[ $sum + $count ]

              let count=$count+1

          done

          echo "the summary is $sum"

      else

        echo "Please enter a number greater than zero"

       fi

      echo -n "Enter a number(>0):"

done


可以计算1到n得值


2.until语句

基本语法为

until  test-commands

do 

commands

done

其实until语句是while语句的另一种写法,除了测试条件相反 因此这里不再赘述


3.for 语句

基本语法为

for  variable  [in list]

do 

    commands

done


举例

#! /bin/bash


echo "Please enter a number:"

read n

for i  in `seq $n`


do

  echo $i

done


运行脚本输入 10则输出1到10得数  

seq接受一个数值范围


统计当前目录下文件的个数

#! /bin/bash



count=0


for file in `ls`

do 

    if ! [ -d $file ]

     then

       let count=$count+1

     fi

done

echo "There are $count files"


用于字符串的比较选项

选项                         描述

-z  str              当字符串str长度为0时返回真

-n  str               当字符串str长度大于0是返回真 

str1=str2             相等 真

str1!=str2            不相等 真


用于文件测试的选项

选项                    描述

-b file            当file是块文件时返回真

-c file             是字符文件 真

-d pathname        是目录

-e pathname         是指定的文件或目录存在

-f file             是常规文件

-g pathname         指定的文件或目录设置了SGID位时

-h file             是符号链接文件

-p file            命名管道

-r pathname        指定的文件或目录设置了可读权限

-s file            存在且大小为0

-u pathname        指定的文件或目录设置了SUID位时

-w pathname          指定的文件或目录设定了可写权限

-x pathname            可执行权限

-o pahtname          被当前用户拥有时


用于数字比较的选项


选项              对应的英语              描述

-eq               equal              如果相等返回真

-ne               not equal          不相等

-lt               lower than         小于

-le               lower or equal    小于或者等于

-gt               greater than       大于

-ge                greater or equal   大于或者等于


复合表达式操作符

操作符                 描述

!expr               非运算,当expr为假时返回真

expr1 -a expr2      与运算

expr1 -o expr2        或运算


4.用户输入命令

read从标准输入接受一行信息

read命令接受一个变量名作为参数,把从标准输入接受到得信息存放在这个变量中

#! /bin/bash


read first second


echo $first

echo $second


输入Hello World!

输出

Hello

World!

5.脚本执行命令

控制脚本行为的命令exit和trap

exit是退出脚本并且返回一个特定的值,

trap用于捕获信号

1.exit命令

exit强行退出脚本 并且向调用这个脚本的进程返回一个整数值

如 #! /bin/bash

   exit 1

2.trap 命令

#! /bin/bash


trap 'echo "Type quit to exit"‘ INT


while [ "$input" != 'quit' ]

do

      read input

done

INT 信号当用户在shell中按ctrl+c快捷键时被发送



#! /bin/bash


trap 'echo "Goodbye"; exit' EXIT

echo "Type 'quit' to exit"


while [ "$input" != 'quit' ]

do

      read input

done

执行结果

Type 'quit' to exit

quit

Goodbye


其它有用的shell命令


命令                     描述

cut                    以指定的方式分各行,并输出特定的部分

diff                    找出两个文件的不同点

sort                 对输入的行进行排序

uniq            删除已经排好序的输入中的重复行

tr                  转换或者删除字符

wc               统计字符 单词和行的数量

substr          提取字符中的一部分

seq               生成整数序列


这些命令对从事shell编程的用户很有用,但这里暂不做介绍

shell还有更深的东西等待我们去学习,但目前只是想了解下,因此暂不做研究。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值