LinuxShell编程学习日记
LinuxShell编程学习日记
作者: 胡浩源相关文档:
- 《shell编程基础》
- 《Linux系统下C程序开发详解》第4章
- 变量赋值,引用和比较
- 流程控制
- if语句
- && 和 || 操作符
- case语句
- select 语句
- while/for循环
又来了新的磁盘阵列了,这次是华为-赛门铁克的,之前使用的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
这个傻子也能看明白把,主要要说的是用来判断条件的表达式,用一对[ ]围起来,必须前后有空格。具体的如下:
- [ -f "somefile" ] :判断是否是一个文件
- [ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限
- [ -n "$var" ] :判断$var变量是否有值
- [ "$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
以上脚本会读入每一个输入的参数并且输出他的文件信息,$*对应于输入的以空格分隔的所有参数。
更多相关文章
- 我用的mysqlcc,我想看别人执行过哪些语句怎么看?
- sql查询每个学生的最高成绩mysql语句
- 一条SQL语句实现添加不重复记录
- SQL查找条件语句构造类
- 如何利用SQL语句查询数据库中所有表的名称?
- sql语句延时执行或者是指定时间执行
- 减去两个SELECT语句以产生单个结果?
- C#中操作Oracle时的SQL语句参数的用法
- 求助:请大侠帮我把下面的查询语句改写为可以在SQL"作业"中定时执