【读书笔记】Linux Shell脚本攻略(二)读取字符,各种循环,分隔符和迭代器,比较和测试

读取n个字符

(不用输入enter)

read -n 8 var 读入8个字符到变量var


无回显的输入(就是输入的时候啥都看不到  -s


-p显示提示信息


在规定时间输入 -t

read -t 2 var
-d设定输入终止符,例如用冒号结束


while循环

例如一个repeat函数,执行功能直到成功为止
例如执行一个下载的命令(有点类似于函数作为参数导入的意思,233)


for循环用法,和C语言一样,233


字符分隔符和迭代器

内部字段分隔符(Internal Field Separator ,IFS),用来把数据流分隔开的符号。

逗号分隔型数值(Comma Separated Value,CSV)

IFS默认是空白字符(空格,制表符和换行),这里修改为逗号,接着再改回来就好……

ata=one,two,three;
oldIFS=$IFS;
IFS=, #now
for item in $data;
do
  echo $item;
done
IFS=$oldIFS;


while,until,for循环的用法

(条件记得加空格,致命一击)


比较与测试

if和else if的用法

if condition;
then
  commands;
else if conditions;then
  commands;
else
  commands;
fi
[空格condition空格]

算数比较符

-gt大于
-lt小于
-eq等于
-ge大于或等于
-le小于或等于

n=10;
while [ $n -gt 0 ]
do
   if [ $n -ge 5 ]; then
     echo "n>=5:"$n;
   else 
     echo "n<5:"$n;
   fi
   let n--;
done
注意 if 条件之后要加 分号

字符串比较

str1="abcde"
str2="abc"
str3="abcde"
if [[ $str1 > $str2 ]];
then
  echo $str1">"$str2;
else 
  echo $str1"<="$str2;
fi

if [[ $str1 == $str3 ]];
then echo $str1"="$str3;
else echo $str1"!="$str3;
fi

判断字符串是否为空或者非空

-z是空 -n非空

str1=""
str2="abc"
if [[ -z $str1 ]];then echo "\""$str1"\"is empty";
else echo "\""$str1"\"is not empty";
fi

if [[ -n $str2 ]];then  echo "\""$str2"\"is not empty";
else  echo "\""$str2"\"is empty";
fi


文件测试相关

文件系统相关测试我们可以使用不同的条件标志测试不同的文件系统相关的属性。

 [ -f $file_var ]:如果给定的变量包含正常的文件路径或文件名,则返回真。

 [ -x $var ]:如果给定的变量包含的文件可执行,则返回真。

 [ -d $var ]:如果给定的变量包含的是目录,则返回真。

 [ -e $var ]:如果给定的变量包含的文件存在,则返回真。

 [ -c $var ]:如果给定的变量包含的是一个字符设备文件的路径,则返回真。

 [ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真。

 [ -w $var ]:如果给定的变量包含的文件可写,则返回真。

 [ -r $var ]:如果给定的变量包含的文件可读,则返回真。

 [ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真。

使用方法

fpath="/etc/passwd"
if [ -e $fpath ]; then
 echo File exists;
else
 echo Does not exist;
fi 

先去吃个晚饭好了





猜你喜欢

转载自blog.csdn.net/zmdsjtu/article/details/79216883