shell学习笔记二

键盘读入字符
从输入中读取n个字符并存入变量variable_name:
read –n number_of_chars variable_name
例如:
$ read –n 2 var
$ echo $var
用不回显得方法读取密码:
read –s var
在特定时限内读取输入:
read -t timeout var
例如 read –t 2 var
用界定符结束输入行:
read -d delim_charvar
例如:read -d "d" var
当读到字符d时会自动结束输入。

字段分隔符和迭代器
内部字符分隔符(IFS)是shell脚本中的一个重要概念,在处理文本数据时,它可是相当的有用。我们将会讨论把单个数据流划分成不同数据元素的界定符,内部分隔符是用于特定用途的定界符。IFS是存储界定符的环境变量。它是当前shell环境使用的默认定界字符串。
例如,我们可以使用IFS读取变量中的每一个条目,
#! /bin/bash
data="name , sex , rollno";
oldIFS=$IFS;
#IFS=','
for item in $data
do
echo Item: $item
done
IFS=$oldIFS
默认情况下IFS是空格符,因此输入如下:
Item: name
Item: ,
Item: sex
Item: ,
Item: rollno
如果将注释去掉,以“,”分割,将会得到如下结果:
Item: name
Item: sex
Item: rollno
循环
Bash提供了多种类型的循环,以for循环和while循环为例。
for循环
for var in list
do
commands; #使用变量$var
done
也可以利用循环生成不同的序列。
echo {1..50}能够生成一个1到50的数字列表。
while 循环
while condition
do
commands;
done
用true作为循环条件能够产生无限循环。
until循环
在bash中可以使用一个特殊的循环until,它会一直执行循环直到给定的条件为真,例如:
#! /bin/bash
x=0;
until [ $x -eq 9 ];
do
let x++;
echo $x;
done
会输出1到9。
比较与测试
if 条件:
if condition:
then
commands
fi
else if 和else:
if condition;
then
commands
else if condition;
then
commands
else
commands
if
if和else语句可以进行嵌套,if的条件判断部分可能变得很长,但是可以用逻辑运算符将它变的简洁:
[ condition ] && action ;#如果condition为真,则执行action
[ condition ] || action ;#如果condition为假,则执行action
算术比较
条件通常放在封闭的括号中,一定要注意在[或]与操作数之间有一个空格,否者会报错。
对变量或值进行算数条件判断:
[ $var -eq 0 ] #当var值为0时,返回真
[ $var -ne 0 ] #当var值不为0时,返回真
其他的操作符如下:
 -gt: 大于
 -lt: 小于
 -ge: 大于或等于
 -le: 小于或等于
可以按照下面的方法结合多个条件进行测试:
[ $var1 –ne 0 –a $var2 –gt 2 ] #逻辑与-a
[ $var1 –ne 0 –o $var2 –gt 2 ] #逻辑或-a
还可以不同的条件测试不同的文件系统相关属性。
[ -f $file_var ] :如果给定的变量包含正常的文件路径或文件名,则返回真。
#! /bin/bash
fpath="/etc/passwd"
if [ -e $fpath ]; #判定给定的文件是否存在
then
echo File exists;
else
echo Dose not exist;
fi
字符串比较
使用字符串比较时,最好使用双中括号,因为有时候采用单个括号会产生错误,所以最好避开。常用方法:
 [ [ $str1 = $str2 ] ],当两个字符串相等时,返回真。
 [ [ $str1 == $str2 ] ],当两个字符串相等时,返回真。
 [ [ $str1 != $str2 ] ],当两个字符串不相等时,返回真。
 [ [ $str1 > $str2 ] ],当str1的字母比str2大时,返回真。
 [ [ $str1 < $str2 ] ],当str1的字母比str2小时,返回真。
 [ [ -z $str1 ] ],当str1包含的是空字符串,返回真。
 [ [ -n $str1 ] ],当str1包含的是非空字符串,返回真。
test命令检测
test命令也可以用来条件检测,比如:

#! /bin/bash
var=0
if [ $var -eq 0 ]
then
echo "True"
fi
if test $var -eq 0
then
echo "True"
fi

你可能感兴趣的:(shell)