LinuxShell编程学习日记



   又来了新的磁盘阵列了,这次是华为-赛门铁克的,之前使用的iozone的绘图脚本给出的结果让我一直觉得很不舒服。那个原始文件大小很多余,绘出来的结果很有气势,分析起来却很不直观。如图:

虽然可以发现FileSize也是影响也是影响性能的比较关键的因素之一,但是无法比较直观的给出二元图还是比较遗憾的。所以接下去要干的事情就比较清晰了,iozone的绘图脚本实际上就是个调用gnuplot的shell,那么我要学两个东西:shell和gnuplot。我选择先学习shell。
学习shell的资料一抓一大把,我搜了个ubuntu社区的 《shell编程基础》,还有 《Linux系统下C程序开发详解》第4章,因为高级的我的确也用不着。

变量赋值,引用和比较

  赋值用等号,引用加$号,要记得是等号两边不能有空格,如果出现num=10;$numer之类的情况要加花括号${num}er,否则他会去找名叫numer的变量。

  还有如果想把命令行的输出结果赋给一个变量的话需要使用``。比如d=`file $1`,这是左上角和~在一起的那个,不是引号。

  需要注意shell的默认赋值是字符串赋值。比如:

  var=1
  var=$var+1
  echo

  打印出来的不是2而是1+1。为了达到我们想要的效果有以下几种表达方式:

  let "var+=1"
  var=$[$var+1]
  var=`expr $var + 1`#注意加号两边的空格,否则还是按照字符串的方式赋值。

  let表示数学运算,expr用于整数值运算,每一项用空格隔开,$[]将中括号内的表达式作为数学运算先计算结果再输出。

  shell里面数值的比较不能使用常见的<,>等运算符,而是采用了命令的方式,详见bash 比较运算符

 

流程控制

if语句

  if ....; then
  ....
  elif ....; then
  ....
  else
  ....
  fi
  这个傻子也能看明白把,主要要说的是用来判断条件的表达式,用一对[ ]围起来,必须前后有空格。具体的如下:
  1.  [ -f "somefile" ] :判断是否是一个文件
  2.  [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
  3.  [ -n "$var" ] :判断$var变量是否有值
  4.  [ "$a" = "$b" ] :判断$a和$b是否相等

  另外在写的时候别忘记分号,条件语句后面有分号,执行语句后面是没有的,有几个if就需要有几个fi,elif不算。
#!/bin/sh
if [ -f "if.sh" ];then echo begin to excute
        if [ -b "$var" ]; then echo failed
        elif [ -x "if.sh" ];then echo excute if.sh
        fi
fi

&& 和 || 操作符


&&表示如果左边为真,那继续执行右边,||则是如果左边为假,执行右边。

case语句


case ... in
...) do something here ;;
esac
case in是用来匹配一个字符串的,是完全匹配,不会检索case的字符串是否被in后面跟的字符串包容。而且跟的是两个分号,esac不要写错。
#!/bin/sh
case "$1" in
        "hello world")
        echo "hellworld";;
        "hello everyone")
        echo "hello everyone";;
esac

$1的意思就是输入的第一个参数,以此类推。

select 语句


select var in ... ; do
break;
done
.... now $var can be used ....

select还是挺有用的,用来让用户选择一个变量需要的赋值。如果有报错的话需要将#!/bin/sh改成#!/bin/bash,这是ubuntu wiki上现成的,否则对于我这个初学者来说估计又要折腾半天 。
#!/bin/bash
echo "who's your girl?"
select girl in "Mary" "HanMeimei" "LiHong";
do break;
done
echo "your girl is $girl"

while/for循环


while ...; do
....
done
这个不用解释什么了,break跳出循环,continue跳出当前循环进入下一次。
#!/bin/bash
i=0
while [ $i -lt 5 ];
do let "i+=1";
        echo $i;
done


for var in ....; do
....
done

for会遍历一个用空格分隔的字符串列表并且给var赋值。
#!/bin/sh
for i in $*;
do echo `file $i`;
done

以上脚本会读入每一个输入的参数并且输出他的文件信息,$*对应于输入的以空格分隔的所有参数。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值