关于shell语法 和shell进度条之间的事儿

来源:互联网 发布:linux dump 函数乱码 编辑:程序博客网 时间:2024/06/08 19:36

一、 shell脚本简单介绍

Shell脚本是一种弱类型的解释非编译型语言;
那么什么是弱类型?什么又是解释非编译型语言?
——即弱类型:没有数据类型,所有变量不需要定义直接使用即可,因为shell脚本把变量的内容当做字符串处理,这个不像C、C++语言,有int、char、double、float,因为这些语言都必须经过编译才可运行;

——解释非编译型语言:shell脚本不需要编译可直接运行;
为什么会这样呢?那是因为shell脚本将其脚本的解释器加入到内存,而后将shell文件当成命令行参数交给解释器,而后解释器对shell脚本内容逐行进行解析;

二、 shell脚本使用概括
1、在使用shell脚本之前先对其简单的熟悉以下:
在shell脚本中,对于#!/bin/bash而言:
其中“#”被称为‘shebang’:用于解释后面的解释器;
而“!/bin/bash”被称为解释器,所有的脚本语言都有属于自己的解释器,比如PHP、Python都有自己的解释器;

可以通过vim /etc/shells可以查看自己的电脑里面都有那些解释器;
下面是我自己电脑里面的自带解释器;

这里写图片描述

2、两种模式:
1) 交互式:在命令行输入一行,执行一行;
2) 批量式:把所有要执行的内容写在脚本里面;

3、Shell脚本执行方法:
运行原理:shell脚本在运行之前,必须加载解释权,然后用解释器运行它。
1) chmod u+x script.sh
./ script.sh

eg: chmod u+x shellbar.sh    ./shellbar.sh

2) /bin/bash script.sh

eg: /bin/bash shellbar.sh

向下面的脚步执行就用的是第二种方法;

4、shell变量内容的提取方法
1)$+变量名
2)${变量名}

三、 shell语法
判断条件时:
对于字符串:==、!=;
对于整型:-eq、-ne、-lt、-le、-gt、-ge;
也可以使用:!(反)、-a(逻辑与)、-o(逻辑或)以及&&(相当于if…then )、||(相当于if not…then );

1、 条件测试:
测试为真该命令状态为0,否则为1;

1) [:是命令,根据退出码判断当前条件是否成立、各参数之间用空格隔开;
eg:[ $i –le 100 ]
echo $?

2) test: 根据退出码判断当前条件是否成立、各参数之间用空格隔开;

eg:test $i –le 100   echo $? 

2、 if/then/elif/fi:if条件判断的实它检测的命令执行的成功与否,根据退出码判断当前条件是否为真;
a) 代码块中不可为空;
b) If和[ 之间必须有空格;
c) If后的命令正确执行then之后的语句,否则指向elif/else/fi;

3、 case/esac:相当于c中的switch/case;
a) 只不过没有switch;
b) 用‘*)’代替default;
c) 用‘;;’替换break,表示跳出;

其格式如下:

case “$变量名” in  变量1)       …       ;;  变量2)       …       ;;  …  *)      …     ;;esac

4、 循环语句
1) for/do/done:

eg:for((i=0;i<100;i++))do      echo $idone

2) while/do/done:

eg:while [ $i –le 100 ]do        echo $idone

3) for…in:

eg:for i in 1 2 3 4 “hello” “c” 1234do         echo $idone

4) for…in {变量范围}:

eg:for i in {a …z}do          echo $idone

5) until 条件:在不管条件的情况下,先执行语句,直到不满足这个条件;

5、 特殊变量和位置参数:
1)$0:相当于main函数中的argv[0];
2)$1、$2: 相当于main函数中的argv[1]、argv[2];
3)$#:参数个数;
4)$$:所执行的shell脚本的进程号;
5)$@:陈列各个参数的内容,多个参数内容之间用空格隔开;
6)$?:返回上一个命令的退出状态;

以下是实例:
这里写图片描述
四、 代码实现

下面是shell进度条的实现:

  #!/bin/bash  i=0;  bbar= ""  while [ $i -le 100 ]  do      printf "[%-100s][%d%%]\r" "$bbar" "$i"      sleep 1      let i++      bbar+='#'  done

以下是运行结果:

这里写图片描述

原创粉丝点击