浏览 1570 次
锁定老帖子 主题:shell编程基础知识
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-04-24
熟悉shell小脚本的一些基本语法,对我们的系统运维和控制非常有用,下面散仙介绍一些比较有用的知识.
1,如何向脚本里传参并打印,写一个小脚本测试传参,a,b,c并打印出来,注意接收来自命令行传入的参数,第一个参数用$1表示,第二个参数$2表示,。。。以此类推。注意:$0表示脚本文件名。另外一个在shell编程中经常用到 的是“$@”这个代表所有的参数,。你可以用一个循环来遍历这个参数。如果用java来类比的话,可以把$@看作是man函数中定义的那个数组 <pre name="code" class="java"> echo $1 echo "上面是输出,下面是测试" for arg in $@ do echo $arg done</pre> 输出如下: <pre name="code" class="java">a 上面是输出,下面是测试 a b c</pre> 遍历根目录下的所有文件的代码 <pre name="code" class="java">for filename in * do echo $filename done</pre> <pre name="code" class="java"> //遍历并拷贝文件至一个新的目录pp下 for filename in * do [ -f $filename ] &amp;&amp; cp $filename /root/pp echo $filename done</pre> 1、条件测试操作: 需要在Shell脚本中有选择性地执行任务时,首先面临的问题就是,如何设置命令执行的条件? 在Shell环境中,可以根据命令执行后返回状态值来判断该命令是否成功执行,当返回值为0是表示成功执行,否则(非0值)表示执行失败。用于特定条件表达式的测试时,可以使用Linux系统中提供的专用工具——test命令、 使用test测试命令时,可以有以下两种形式。 test 条件表达式 【 条件表达式 】 这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的是,方括号“[”或者“]”与条件表达式语句之间至少需要有一个空格进行分隔。 根据需要判断的条件内容不同,条件操作也不同,最常用的条件主要包括文件状态测试,比较整数值大小,比较字符串,以及同时判断多个条件时的逻辑关系,下面将分别进行讲解。以下主要采用方括号的测试形式。 1.1、测试文件状态 文件状态测试是指根据给定的路径名称,判断该名称对应的是文件还是目录,或者判断文件是否可读,可写,可执行等。根据判断的状态不同,在条件表达式中需要使用不同的操作选项。 <pre name="code" class="java">if判断: ?b当file存在并且是块文件时返回真 -c 当file存在并且是字符文件时返回真 -d 当pathname存在并且是一个目录时返回真 -e 当pathname指定的文件或目录存在时返回真 -f 当file存在并且是正规文件时返回真 -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真 -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效 -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真 -p 当file存在并且是命令管道时返回为真 -r 当由pathname指定的文件或目录存在并且可读时返回为真 -s 当file存在文件大小大于0时返回真 -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真 -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。 -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。 -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -le 小于等于 -ge 大于等于 -z 空串 = 两个字符相等 != 两个字符不等 -n 非空串 -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L filename 如果 filename为符号链接,则为真 -r filename 如果 filename可读,则为真 -w filename 如果 filename可写,则为真 -x filename 如果 filename可执行,则为真 filename1 -nt filename2 如果 filename1比 filename2新,则为真 filename1 -ot filename2 如果 filename1比 filename2旧,则为真 -z string 如果 string长度为零,则为真 -n string 如果 string长度非零,则为真 string1 = string2 如果 string1与 string2 相同,则为真 string1 != string2 如果 string1与 string2 不同,则为真 num1 -eq num2 等于 num1 -ne num2 不等于 num1 -lt num2 小于 num1 -le num2 小于或等于 num1 -gt num2 大于 num1 -ge num2 大于或等于</pre> 1.4:逻辑测试: 逻辑测试是指同时使用的两个(或多个)条件表达式之间的关系。用户可以同时测试多个条件,根据这些条件是否同时成立或者只要有其中一个条件成立等情况,来决定采取何种操作。逻辑测试可以使用的操作选项如下。 &gt; &amp;&amp;:逻辑与,表示前后两个表达式都成立时整个测试结果才为真,否则结果为假。在使用test命令形式进程测试时,此选项可以改为" -a"。 &gt; ||:逻辑或,表示前后两个条件至少有一个成立时整个测试结果即为真,否则结果为假。在使用test命令形式进行测试时,此选项可以改为"-o“。 &gt; !:逻辑否,表示当指定的条件表达式不成立时,整个测试命令的结果为真。 在上述逻辑测试的操作选项中,”&amp;&amp;“和”||“通常也用于间隔不同的命令操作,其作用是相似的。同时使用多个逻辑运算操作时,一般安装从左到右的顺序进行测试。 多重if语句例子: <pre name="code" class="java">#! /bin/bash #接受外界传参,注意加x是为了防止输出空时,报的异常 if [ $1x = "a"x ] ; then echo "it is a"; elif [ $1x = "b"x ] ; then echo "it is b"; elif [ $1x = "中国"x ]; then echo "输入的是中国"; else echo "nothing"; fi</pre> if单独测试: <pre name="code" class="java"> if [ 1 -gt 2 ] ;then echo "1 &gt; 2 "; else echo " 1 &lt; 2 "; fi </pre> for循环测试: case语句小例子: <pre name="code" class="java"> case $1 in 1|one) echo "out put is 1 or one" ;; 2|two) echo "out put is 2 or two" ;; 3) echo aaa echo bbb echo ccc;; *) echo "this is non match";; esac</pre> 统计当前登录系统用户数 who | wc -l 统计行数: wc -l txt.file 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |