shell的基本语法以及shell进度条的编写
来源:互联网 发布:梯形螺纹编程实例 编辑:程序博客网 时间:2024/06/03 01:41
一、shell提示符及其环境
提示符:$
环境:Linux,Unix,Dos等等
Shell其实就是一个解释执行命令的程序,所谓shell编程其实就是用一定的语法将各种基本的命令组合起来,让shell程序去解释执行。
#!/bin/bash
#
二、shell语法
1、条件测试
命令 test 或 [ 可以测试一个条件是否成立。shell脚本中与C语言的逻辑刚好相反,0表示测试结果为真,1表示测试结果为假。
例如测试两个数的大小关系:
左方括号 [ 是一个命令的名字,传给命令的各参数之间应该用空格隔开,如,$VAR、-gt、3、] 是 [ 命令的四个参数,它们之间必须用空格隔开。命令 test 或 [ 的参数形式是相同的,只不过 test 命令不需要]参数。 -eq (等于) - ne (不等于) -lt (小于) -le (小于等于) -gt (大于) -ge (大于等于)
①带与、或、非的测试命令
[ ! EXPR ] : EXPR可以是上表中的任意一种测试条件,!表示逻辑反
[ EXPR1 -a EXPR2 ] :EXPR1和EXPR2可以是上表中的任意一种测试条件, -a 表示逻辑 与
[ EXPR1 -o EXPR2 ] :EXPR1和EXPR2可以是上表中的任意一种测试条件, -o 表示逻辑 或
② if / then / elif / else / fi
在 Shell 中用 if、then、elif、else、fi 这几条命令实现分支控制。这种流程控制语句本质上也是由若干条 Shell 命令组成的 。如果两条命令写在同一行则需要用;号隔开,一行只写一条命令就不需要写;号了,另外, then 后面有换行,但这条命令没写完, Shell 会自动续行,把下一行接在 then 后面当作一条命令处理。和 [ 命令一样,要注意命令和各参数之间必须用空格隔开。 if 命令的参数组成一条子命令,如果该子命令的 Exit Status 为0(表示真),则执行 then 后面的子命令,如果 Exit Status 为0(表示假),则执行 elif、else 或者 fi 后面的子命令。 if 后面的子命令通常是测试命令,但也可以是其它命令。 Shell 脚本没有 { } 括号,所以用 fi 表示 if 语句块的结束。
结构一: 结构二:
例如:
③case / esac
case命令可类⽐比C语言的 switch / case 语句, esac 表示 case 语句块的结束。C语言的 case 只能匹配整型或字符型常量表达式,而 Shell 脚本的 case 可以匹配字符串和 Wildcard ,每个匹配分支可以有若干条命令,末尾必须以;;结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳 到 esac 之后,不需要像C语言一样用 break 跳出。
结构: 例如:
read 命令的作用是等待用户输入一行字符串,将该字符串存到一个 Shell 变量中。
④And 和 Or
Shell 还提供了 && 和 || 语法,和C语言类似,具有Short-circuit特性,&& 相当于 “if...then...”,而 || 相当于 “if not...then...”。 && 和 || 用于连接两个命令,而上面讲的 -a
和 -o 仅用于在测试表达式中连接两个测试条件,两种写法等价,但是有区别!!
结构:
command1 && command2
command1 || command2
2、循环语句
for循环
写法①: 写法②:
while循环
结构: 示例:
until循环(类似C语言的do while)
结构: 示例:
从循环中退出: break和continue命令
break 立即退出循环
continue 忽略本循环中的其他命令,继续下一下循环
3、函数和C语言类似,Shell中也有函数的概念,但是函数定义中没有返回值也没有参数列表。例如::注意函数体的左花括号 { 和后面的命令之间必须有空格或换行,如果将最后一条命令和右花括号 } 写在同一行,命令末尾必须有 ;号。
在定义 foo() 函数时并不执行函数体中的命令,就像定义变量一样,只是给 foo 这个名字一个定义,,到后面调用 foo 函数的时候(注意Shell中的函数调用不写括号)才执行函数体中的命令。Shell脚本中的函数必须先定义后调用,一般把函数定义都写在脚本的前面,把函数调用和其它命令写在脚本的最后(类似C语言中的 main 函数,这才是整个脚本实际开始执行命令的地方)。
Shell函数没有参数列表并不表示不能传参数,事实上,函数就像是迷你脚本,调用函数时可以传任意个参数,在函数内同样是用$0、$1、$2等变量来提取参数,函数中的位置参数相当于函数的局部变量,改变这些变量并不会影响函数外面的$0、$1、$2等变量。函数中可以用 return 命令返回,如果 return 后面跟一个数字则表示函数的Exit Status。
结构: 示例:
4、数组
bash 支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
定义数组:
在Shell中,用括号来表示数组,数组元素用 “ 空格 ” 符号分割开。定义数组的一般形式为: array_name=(value1 ... valuen)
示例:
还可以单独定义数组的各个分量:
示例:
可以不使用连续的下标,而且下标的范围没有限制。
读取数组
读取数组元素值的一般格式是: ${array_name[index]}
使用 @ 或 * 可以获取数组中的所有元素。
示例:
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同。
示例:
5、shell程序的调试
使用-x进行跟踪执行,执行并显示每一条指令。
6、比较运算符
① 文件比较运算符
-e filename
-d filename
-f filename
-L filename
-r filename
-w filename
-x filename
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]
② 字符串比较运算符 (请注意引号的使用,这是防止空格扰乱代码的好方法)
-z string
-n string
string1 = string2 如果 string1 与 string2 相同,则为真 [ "$myvar" = "one two three" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "$myvar" != "one two three" ]
三、进度条的编写
代码:
运行图:
- shell的基本语法以及shell进度条的编写
- Linux脚本编程/shell语法和shell进度条的编写
- shell进度条的编写
- shell语法的简单学习以及编写一个简单的进度条
- Shell的基本语法
- Shell的基本语法
- shell的基本语法
- Shell的基本语法
- shell的基本语法
- shell 语法 shell命令 用shell编写进度条
- Linux的Shell编程 Shell基本语法
- shell脚本实现彩色进度条的编写
- shell下彩色进度条的编写
- shell bash的基本语法
- shell 脚本的基本语法
- 关于shell语法 和shell进度条之间的事儿
- shell基本语法及实现彩色进度条
- 关于shell的脚本编写的语法
- 变量的声明、定义、extern、static总结
- B
- JFreeChart 制作折线图分析数据
- 大型网站架构(二)万无一失:网站的高可用架构
- iOS 提供一种检测新版本的方法
- shell的基本语法以及shell进度条的编写
- Keepalive详解
- HTTP与HTTPS的区别
- Java NIO 服务器与客户端实现文件下载
- ConcurrentHashMap中的putIfAbsent方法的使用以及返回值的含义
- 两数组的交 II
- 1059. C语言竞赛(20)
- Linux下的变量替换
- JavaScript函数调用中的this