Shell 脚本

查看帮助一是man bash,二是进入www.gnu.org,找到bash的帮助文档(更详细)。 

bash -x script.sh 能够调试shell脚本

一、变量

       1、本地变量(都是字符的形式,没有数字类型)

        version=1 或者

        version="hello world" 如果有空格,那么就要用引号

        数组:

        arr=(1,2)   或者

        array[0]=1   array[1]=2

  

        2、引用本地变量(大部分不加" ")

        $version 或者"$version" 目前未发现发现有可不同,${#versoin}输出一共有多少个字符

        ${array[0]}为第一个元素,${array[1]}为第二个元素,${array[*]}为所有元素,${array[@]}为所有元素,${#array[*]}为数组中所有元素的个数

        { }的使用是因为里面包含的特殊字符# 或者是[ ] 


        3、引用环境变量

        $HOME:当前用户的主目录

        $PATH:shell搜索路径

        $TERM:终端程序名称

        $UID:当前用户的识别字,取值是由数位构成的字串

        $PWD:当前工作目录的绝对路径名,该变量的取值随cd命令的变化而变化


        4、引用位置变量

        $0是脚本文件名

        $1 $2 ······$9 分别脚本的第一个到第九个命令行参数

        $#命令行参数的个数 

        $@  $*所有命令行参数

        $? 上一个命令的退出状态,0是正常状态,非0为非正常状态

        $$ 正在进行的进程ID号


二、算术运算

        no1=4

        no2=5

        1、let result=no1+no2

        2、result=$[ $no1 +3 ]

        3、result=$(( $no1 + 3 ))

        4、result=`expr  $no1 + 4`


三、条件判断

        1、数字比较:

         num=3

        [  $num -gt 1 -a $num1 -lt 10 ]

        eq等于,ne不等于,gt大于,ge大于等于,lt小于,le小于等于,-a表示与,-o表示或,!表示非

        ((  $num > 1 && $num1 < 10 ))


        2、字符串比较:

        verson="release 1"

        [[ $version == "release 1" && $version != "test" ]],$version也可以加上引号,变为"$version" 。 [[  ]]可以使用&& ||和一些通配符

        [ $version == "release 1" -a $version != "test" ]

  [ -z $str ]长度为0,返回真,[ -n $str ]长度非0,返回真


  、文件判断

  


         4、变量接受命令返回的值

          homedir=`cd /home/jltxgcy && pwd`   

          ostype=$( uname -s )             


四、语句

        1、判断

  if condition;

        then

               commands

        fi

  if condition;

        then

              commands

        elif condition;

        then

              commands

        else

              commands

        fi


        2、循环

        while condition

        do 

            commands

        done

     

       for((i=0;i<10;i++))  

       {

              commands

       }    

  

       for var in list;

       do

          commands

       done


五、函数调用
       首先执行normalExit()前的代码,然后执行drawstars $1,调用的函数可以在此句话前也可在此句话后,函数之间传递参数,在另一个函数体重用$1,$2接收。函数中调用其他函数,其他函数的位置可位于函数前或者函数后


六、异步函数
       trap "normalExit" 2 3,当发生2(Ctrl +C),3号信号时就会触发normalExit。函数体放在此句话的前后都可。如果该脚本全部执行完毕,Ctrl+C会触发normalExit(里面有语句exit 0),退出后接着echo $?会返回0。如果该脚本没有全部执行完毕,Ctrl+C就不会调用normalExit,退出后接着echo $?会返回非0


七、代码

#!/bin/bash  
warn_change='the number of parameter must be between 5 and 15'  
arr=(1 2)  #变量如果是数字一般不加双引号

if [ $# ge 2 ]; then 
     echo "only one parameter is needed"
     exit 1  #退出出错
fi

if (( $1 < 5 || $1 > 15 )); then #条件测试数字前不加双引号
     echo $warn_change 
     exit 1
elif (($1 >= 5 && $1 < 10)); then
     echo -en "\033[3${arr[0]}m" #echo输出一般要加上双引号,否则转移字符和空格都不起作用
else
     echo -en "\033[3${arr[1]}m"
fi

#先执行以上信息
normalExit()
{
     local cmd="exit 0" #定义了本地变量
     echo "normal exit"
     eval $cmd #安全退出,$?会得到0
}
 
drawstars()
{
     read -p "please input style * or #:" -t 10 var
     printCurrentdir  "       " #传递了参数
     trap "normalExit" 2 3 #异步信号处理
     local i
     i=0
     while((i<$1))# $1是drawstars $1 传递过来的
     do
         for ((j=0;j<$[$1-$i-1];j++))
             do
                 echo -n " "
             done
 
         for ((j=0;j<$[2*$i+1];j++))
             do
                 echo -n "$var"
             done
 
         echo -ne '\n' #-e使\n生效,并抑制换行,最后结果还是换行
         let i++
     done
     echo -e "\033[0m" #恢复了黑色
     sleep 60 #睡眠60s 只能这样才能让Ctrl+C派上用场
}

printCurrentdir()
{
     echo -n "$1" #必须加上"",否则只输出一个空格
     echo `basename \`pwd\`` #详见反引号的作用
}
 
drawstars $1  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值