实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
引言
SHELL在处理一些问题的时候有得天独厚的优势,快捷方便,学会了还可以显摆显摆,当然了,shell的语法有点坑爹,没有系统的学过,只能一点一点的积累。
今天这个是在实现一个刷新数据库数据的脚本的时候碰到的一些知识点,刷新的时候用到了正则匹配、数学运算、比较等等。
shell中的数组
数组的定义
arr=(1 2 3 4 5)
arr=(燕睿涛 yrt lulu yanruitao)
arr=('^[0-9]+$' '^yrt.(d+).log$')
arr=(
"燕睿涛"
"yanruitao"
"today is a good day!"
)
数组的使用
len=${#arr[@]} #返回的是数组元素的个数
echo ${arr[0]} #数组中的第一个元素,这个和其他语言的数组类似,下表从0开始
echo ${arr[2]} #数组中的第3个元素
实际的例子
[yanruitao@boss_runtime sh]$ arr=(
> "燕睿涛"
> "http://www.baidu.com/(d+).html"
> "yanruitao"
> "lulu"
> "yrt"
> )
[yanruitao@boss_runtime sh]$ echo ${#arr[@]}
5
[yanruitao@boss_runtime sh]$ echo ${arr[1]}
http://www.baidu.com/(d+).html
[yanruitao@boss_runtime sh]$ echo ${arr[0]}
燕睿涛
[yanruitao@boss_runtime sh]$ echo ${arr[5]}
[yanruitao@boss_runtime sh]$
shell中的大小比较
#第一种(()) if((6 <8)); then echo "yes 燕睿涛"; fi #输出——yes 燕睿涛 if(($a>8)); then echo "yes 燕睿涛"; fi if(($a<=$b)); then echo "yes 燕睿涛"; fi #第二种[] [[]] if [ 2 -gt 1 ]; then echo "iforever 燕睿涛"; fi if [[ 'abc' > 'ab' ]]; then echo "iforever 燕睿涛"; fi #iforever 燕睿涛 if [[ 2 < 10 ]]; then echo "iforever 燕睿涛"; fi #无输出 if [[ 2 -lt 10 ]]; then echo "iforever 燕睿涛"; fi #iforever 燕睿涛
可以看到上面这几种还是有些规律的:
双小括号[(())]里面是可以直接使用大于小于号进行比较(>、<、<=、>=),而且不需要“坑爹”的空格,用于数学计算
单中括号([])里面比较必须使用-gt、-lt、-ne、-eq这些运算符,而且必须要有严格的空格要求
双中括号([[]])里面比较可以使用>、<、-gt、-lt......这两种格式,但是还是必须要有严格的空格要求,而且双中括号中的>、<对类似于字符串的比较,所以在使用的时候需要注意
shell中的括号
#看看小括号的用法,首先是在for循环里面,相当于还是数学计算 [yanruitao@boss_runtime ad]$ for((a=0;a<10;a++)) > do > echo $a > done 0 1 2 3 4 5 6 7 8 9 #对变量进行++,还是相当于数序运算 [yanruitao@boss_runtime ad]$ i=1 [yanruitao@boss_runtime ad]$ echo $i 1 [yanruitao@boss_runtime ad]$ let i++ [yanruitao@boss_runtime ad]$ echo $i 2 [yanruitao@boss_runtime ad]$ ((i++)) [yanruitao@boss_runtime ad]$ echo $i 3 #数学运算 [yanruitao@boss_runtime ad]$ echo 1+2 1+2 [yanruitao@boss_runtime ad]$ echo $((1+2)) 3 #单括号里面是一个命令组,括号中的命令将会新开一个shell顺序执行,所以这个里面相当于一个封闭的空间,里面的变量什么的不能被剩余代码使用 [yanruitao@boss_runtime ad]$ a=1 [yanruitao@boss_runtime ad]$ (a=3;echo $a) 3 [yanruitao@boss_runtime ad]$ echo $a 1 #括号中and的使用 if [[ -n "$ret" && $ret -gt 123 ]]... #[[]]双中括号中只能使用&&,不能使用-a if [ -n "$ret" -a $ret -gt 123 ]... #[]单中括号中只能使用-a,不能使用&& if(($ret)) && (($ret >123 ))... #(())双小括号使用&&










