标签:
shell脚本现在已经成为了一种非常普遍的脚本语言,之所以如此广泛的被应用,毋庸置疑它是有它的独到之处的。shell脚本语言和其他的语言比如说c/c++有何不同呢?c/c++等语言属于编译型语言,也就是说程序每次执行前都要经过编译生成可执行的二进制文件方可;而shell属于解释型语言,它必须依赖解释器来逐行解释命令,现在我们所熟知并常用的解释器为bash解释器。所以以后学习使用一门解释型语言的时候,必不可少的是首先得下载一个解释器。下面就来看一个简单的shell脚本:
#! /bin/bash int_val=312 char_val='a' float_val=3.12 string_val="aaaaaa" echo $int_val echo $char_val echo $float_val echo $string_val echo $int_val'+'$char_val'+'$string_val'+'$float_val' echo ${char_val}a$int_val运行结果如下:
由上图运行结果可以看出:我们所依赖的解释器就是bash,同时shell脚本中定义使用变量并且连接几个不同的变量远比我们使用c/c++实现方便多了!
shell脚本中规定:变量使用前不需要定义类型,需要使用的变量由用户自定义 ;shell脚本下默认所有的变量均为字符串类型,所以我们就可以根据自己的需求进行字符串的连接,如上代码所示,连接过程中只需要使用‘+’号或需要的字符即可。
下面具体从shell的符号和shell的语法来学习记忆。
一.shell符号
1.当你写好一个shell标本后,怎样无执行这个脚本的到自己所需要的结果呢?
答:有几种方法:(1)给脚本加上可执行的权限:chmod +x +文件名 ,然后执行 ./+文件名即可
(2)/bin/bah +文件名
(3)source ./+文件名
(4) . ./+文件名
2.shell中有哪些变量呢?
答:按类型可以分为本地变量和环境变量,可以使用env查看当前系统中的所有环境变量。而本地变量只存在于当前shell进程中,我们可以使用set命令来查看当前shell进程中所有的变量(包括本地变量和环境变量)。
这里与举一个例子:
(1)在当前shell中定义一个变量:value=100(注意这里等号两边都不能有空格,不然会被shell解释成命令和命令行参数)
(2)使用export可以导出这个变量到环境变量中
(3)使用env查看该命令即可
如下图所示
(4)使用unset可以删除已定义的环境变量或者本地变量
3.shell怎引用变量?
答:如刚开始举得例子一般,定义变量不需要类型,取变量的值时只需使用$+变量名即可
4.我们怎么拿到本目录下所有符合条件的呢?
答:在这里,我们就提到了通配符,常见的通配符有:*、?、[],分别解释如下:
(1)*:匹配0或者多个任意字符
(2)?:匹配一个任意字符
(3)[]:匹配方括号中任意一个字符的一次出现
例子如下:
5.怎样使用命令代换?
答:命令代换就是shell先执行符号内的命令,然后将输出结果立即代换到当前命令行中。
如下例子:
#! /bin/bash DATE=`date` echo $DATE
#! /bin/bashDATE=$(date)echo $DATE
6.转义字符在建立文件的时候怎么使用?
答:一般文件名随用户定义,但当你想touch一个名为$ $的文件的时候,转移字符就派上用场了。
7.shell脚本中的单引号和双引号有共同点?
答:shell脚本中,单引号和双引号都只是保持字符的字面意思,也就是说不对字符的内容进行解释。
二.shell基本语法
1.条件测试
c语言中条件判断用的是if语句,而在shell脚本中,常用的两种条件测试命令时test和[.测试结果为真返回0,为假返回1(与语言的返回条件刚好相反)。下面是一些测试例子:
(1)
#! /bin/bash read val test $val -gt 10 echo $? [ $val -gt 10 ] echo $?运行结果如下:
当然除使用命令测试之外,命令也可以加入参数进行判断:
(2)
<span style="font-size:18px;"><strong>#! /bin/bash read input [ -d $input ] echo $? [ -f $input ] echo $? [ -z $input ] echo $? [ -n $input ] echo $?</strong></span>运行结果如下:
(3)字符串的判断
<span style="font-size:18px;"><strong>#! /bin/bah str1="i am boy" str2="t am gilr" [ "X$str1" == "X$str2" ]</strong></span>
<span style="font-size:18px;"><strong>echo $? </strong></span>一般字符串在做比较的时候,习惯在字符串中加入X防止空串出现
当然,测试命令之间还可以进行与或非逻辑运算,上面所比较的字符串的方法就是其中的一个例子
使用的语法为:[ 测试条件 -a 测试条件]
[!测试条件]
[ 测试条件 -o 测试条件]
#! /bin/bash str1="i am a beautiful girl" [ -f test.sh -a "X$str1" == "i am a beautiful girl" ] echo $?运行结果为1 。
#! /bin/bash read sex if [ "Xsex" == "Xman" ];then echo "you are a boy elif [ "Xsex" == "Xwoman" ] echo "you are a girl" else echo "say nothing" fi
但是在这里,必须注意,if语句和fi之间不能有空语句,可以用:隔开,表示总是为真。例子如下:
#! /bin/bash read input if [ -d $input ];then echo "$input is dir" fi if : ;then echo "/ is always true" fi除此之外,shell脚本还提供了&& 和||命令,它的作用相当于if...then /if ...not then(例子如下)
#! /bin/bash val=10 [ $val -eq 10 ] && { echo "you are right" exit 0 } echo "not true" [ $val -eq 10 ] || { echo "not true" exit 1 } echo "you are right“3.case /esac它就相当于c语言中的switch语句,例子如下:
#! /bin/bash read val case $val in a) service iptables start echo "start" ;; b) service iptables stop echo "stop" ;; c) service iptables restart echo "restart" ;; esac上述代码中的;;符号就类似于switch语句中的break。
#! /bin/bash for i in $@ do echo "$i" done
#! /bin/bash for(( i=0; i<100; i++ )) do echo "$i" done
5.while/ do/done,例子如下:
#! /bin/bash echo "printf 1+1=?" read val while [ $val -eq 2 ] do echo "you are a smart man" done6.位置参数和特殊变量
(1)$0:表示命令行上可执行文件的文件名
(2)$1、$2.....:表示命令行上的参数1,参数2 等等
(3)$@:表示参数列表
(4)$#:表示命令行参数的个数
(5)$?:表示当前进程的退出码
(6)$():表示命令替换
(7)$$:表示shell的进程号
7.函数:shell脚本中,函数一般先定义,定义的时候不写
参数和返回值,调用的时候只需写出函数名就好。一般程序是从函数调用的地方执行的。
标签:
原文地址:http://blog.csdn.net/woaimeinuo/article/details/51166628