shell 脚本基础语法

#!/bin/sh

这句一般在 shell 脚本的第一行。

告诉操作系统, 此脚本的解释器为 /bin/sh 这个可执行文件。类似地, 如果你的脚本用 bash, ksh, 解释, 第一行就应该是
#!/bin/bash
#!/bin/ksh

注意: shell 脚本对空格要求十分严格,关键字和符号之间必须加空格。


一、判断

1、字符串判断

str1 = str2 (或者‘==’)     当两个串有相同内容、长度时为真

str1 != str2                             当串 str1 和 str2 不等时为真
-n str1                               当串的长度大于0时为真(串非空)
-z str1                                当串的长度为0时为真(空串)
str1                                  当串 str1 为非空时为真


2、数字的判断
int1 -eq int2                              两数相等为真
int1 -ne int2                              两数不等为真
int1 -gt int2                               int1 大于 int2 为真
int1 -ge int2                              int1 大于等于 int2 为真
int1 -lt int2                                int1 小于 int2 为真
int1 -le int2                                  int1 小于等于 int2 为真

3、文件的判断
-r file                                        用户可读为真
-w file                                       用户可写为真
-x file                                        用户可执行为真
-f file                                        文件为正规文件为真
-d file                                       文件为目录为真
-c file                                        文件为字符特殊文件为真
-b file                                        文件为块特殊文件为真
-s file                                        文件大小非0时为真
-t file                                        当文件描述符(默认为1)指定的设备为终端时为真

4、复杂逻辑判断
-a                                            与
-o                                          或

!                                          非


5、条件判断

5.1 if -then 语法格式:                          if     [  条件  ] ;  then 

                                                              elseif  [  条件2  ] ;  then

                                                              else

                                                              fi     #if 语句结束标识

示例1:输入分数输出成绩:

#! /bin/sh  
echo "Please enter a score:"  
  
read score  
  
if [ -z "$score" ]; then  
   echo "You enter nothing.Please enter a score:"  
   read score  
else  
   if [ "$score" -lt 0 -o "$score" -gt 100 ]; then  
      echo "The score should be between 0 and 100.Please enter again:"  
      read score  
   else  
      #如果成绩大于90  
      if [ "$score" -ge 90 ]; then  
         echo "The grade is A."  
      #如果成绩大于80且小于90  
      elif [ "$score" -ge 80 ]; then  
         echo "The grade is B."  
      #如果成绩大于70且小于80  
      elif [ "$score" -ge 70 ]; then  
         echo "The grade is C."  
      #如果成绩大于60且小于70  
      elif [ "$score" -ge 60 ]; then  
         echo "The grade is D."  
      #如果成绩小于60  
      else  
         echo "The grade is E."  
      fi  
   fi  
fi 


5.2 case-esac 语法格式:                     case   $变量名称  in 

                                                             "第一个变量内容")

                                                              程序段

                                                              ;;

                                                              "第二个变量内容")

                                                              程序段

                                                              ;;

                                                             *)

                                                             程序段

                                                             ;;

                                                            esac


二、循环

1. for 循环

语法格式:                                           for  ...     in  ....

                                                            do

                                                            程序段

                                                            done #结束标识


示例2:输出 1-100 之间可以被 3 整除的数:

#!/bin/sh

for i in `seq 100`
do
if((i%3==0))
then
echo $i
continue
fi
done


三、shift 用法

shift 命令用于对参数的移动(左移),通常用于在不知道传入参数个数的情况下依次遍历每个参数然后进行相应处理(常见于Linux 中各种程序的启动脚本)


示例3:依次读取输入的参数并打印参数个数:

#!/bin/sh  
while [ $# != 0 ];do  
echo "第一个参数为:$1,参数个数为:$#"  
shift  
done
上面的文件名是 demoTest.sh ,输入如下命令运行:demoTest.sh  a b c d e f


结果显示如下:
第一个参数为:a,参数个数为:6
第一个参数为:b,参数个数为:5
第一个参数为:c,参数个数为:4
第一个参数为:d,参数个数为:3
第一个参数为:e,参数个数为:2
第一个参数为:f,参数个数为:1


从上可知 shift(shift 1) 命令每执行一次,变量的个数($#)减一(之前的$1变量被销毁,之后的$2就变成了$1),而变量值提前一位。

同理,shift n 后,前 n 位参数都会被销毁。


示例4:

#!/bin/sh  
echo "参数个数为:$#,其中:"  
for i in $(seq 1 $#)  
do  
  eval j=\$$i  
  echo "第$i个参数($"$i"):$j"  
done  
  
shift 3  
  
echo "执行shift 3操作后:"  
echo "参数个数为:$#,其中:"  
for i in $(seq 1 $#)  
do  
  #通过eval把i变量的值($i)作为变量j的名字  
  eval j=\$$i  
  echo "第$i个参数($"$i"):$j"  
done


创建文件: touch

创建文件夹: mkdir


示例5:

#!/bin/bash
#往脚本里传 待删除文件个数  待删除图片个数   待删除文件路径  待删除图片路径
a=1
#file Num
fileN=$1+1
#imageUrl Num
imagN=$2+1
for i in "$@"
do
    if [ $a -ge 3 ] && [  $a -le  $(($fileN+2)) ]
    then
#rm -f or  rm
#         echo $i
     rm -f $i
    fi
#delate imageUrlFile
    if [ $a -gt  $(($fileN+2)) ]
    then
#      echo $i
      rm -f $i
    fi

    let "a++"
done

推荐:(优质文章)

shell脚本删除目录下的指定文件


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值