shell编程基础知识

[b][color=green][size=large]熟悉shell小脚本的一些基本语法,对我们的系统运维和控制非常有用,下面散仙介绍一些比较有用的知识.


1,如何向脚本里传参并打印,写一个小脚本测试传参,a,b,c并打印出来,注意接收来自命令行传入的参数,第一个参数用$1表示,第二个参数$2表示,。。。以此类推。注意:$0表示脚本文件名。另外一个在shell编程中经常用到 的是“$@”这个代表所有的参数,。你可以用一个循环来遍历这个参数。如果用java来类比的话,可以把$@看作是man函数中定义的那个数组

[/size][/color][/b]

echo $1

echo "上面是输出,下面是测试"


for arg in $@

do

echo $arg

done

[b][color=green]输出如下:[/color][/b]
a
上面是输出,下面是测试
a
b
c

[b][color=olive][size=large]遍历根目录下的所有文件的代码[/size][/color][/b]
for  filename in *
do
echo $filename
done



//遍历并拷贝文件至一个新的目录pp下
for filename in *
do

[ -f $filename ] && cp $filename /root/pp

echo $filename

done



[b][color=olive][size=large]1、条件测试操作:
需要在Shell脚本中有选择性地执行任务时,首先面临的问题就是,如何设置命令执行的条件?
在Shell环境中,可以根据命令执行后返回状态值来判断该命令是否成功执行,当返回值为0是表示成功执行,否则(非0值)表示执行失败。用于特定条件表达式的测试时,可以使用Linux系统中提供的专用工具——test命令、
使用test测试命令时,可以有以下两种形式。
test 条件表达式
【 条件表达式 】
这两种方式的作用完全相同,但通常后一种形式更为常用,也更贴近编程习惯。需要注意的是,方括号“[”或者“]”与条件表达式语句之间至少需要有一个空格进行分隔。
根据需要判断的条件内容不同,条件操作也不同,最常用的条件主要包括文件状态测试,比较整数值大小,比较字符串,以及同时判断多个条件时的逻辑关系,下面将分别进行讲解。以下主要采用方括号的测试形式。
1.1、测试文件状态
文件状态测试是指根据给定的路径名称,判断该名称对应的是文件还是目录,或者判断文件是否可读,可写,可执行等。根据判断的状态不同,在条件表达式中需要使用不同的操作选项。[/size][/color][/b]
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 大于或等于


[b][color=olive][size=large]1.4:逻辑测试:
逻辑测试是指同时使用的两个(或多个)条件表达式之间的关系。用户可以同时测试多个条件,根据这些条件是否同时成立或者只要有其中一个条件成立等情况,来决定采取何种操作。逻辑测试可以使用的操作选项如下。
> &&:逻辑与,表示前后两个表达式都成立时整个测试结果才为真,否则结果为假。在使用test命令形式进程测试时,此选项可以改为" -a"。
> ||:逻辑或,表示前后两个条件至少有一个成立时整个测试结果即为真,否则结果为假。在使用test命令形式进行测试时,此选项可以改为"-o“。
> !:逻辑否,表示当指定的条件表达式不成立时,整个测试命令的结果为真。
在上述逻辑测试的操作选项中,”&&“和”||“通常也用于间隔不同的命令操作,其作用是相似的。同时使用多个逻辑运算操作时,一般安装从左到右的顺序进行测试。

多重if语句例子:
[/size][/color][/b]
#! /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


[b][color=green][size=large]if单独测试:[/size][/color][/b]

if [ 1 -gt 2 ] ;then

echo "1 > 2 ";
else

echo " 1 < 2 ";

fi



[b][color=green][size=large]for循环测试:[/size][/color][/b]

[img]http://dl2.iteye.com/upload/attachment/0096/4365/53761ef3-e370-3b3c-a075-21a035c93511.jpg[/img]
[b][color=olive][size=large]case语句小例子:[/size][/color][/b]


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



[img]http://dl2.iteye.com/upload/attachment/0096/4370/45504c1e-022b-37b4-84bb-837325d5162d.jpg[/img]
[b][color=olive][size=large]统计当前登录系统用户数
who | wc -l

统计行数: wc -l txt.file

[/size][/color][/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值