1.Bash中的READ命令

#读取n个字符存入变量

read -n number_of_chars variable_name

示例:

amosli@amosli-pc:~$ read -n  var
heamosli@amosli-pc:~$ echo $var
he

#不回显的方式读取密码

read -s var

示例:

amosli@amosli-pc:~$ read -s var
amosli@amosli-pc:~$ echo $var
pw

#显示提示信息

read -p "Enter input:" var

示例:

amosli@amosli-pc:~$ read -p "Enter input:" var
Enter input:hello,input
amosli@amosli-pc:~$ echo $var
hello,input

#限时输入

read -t  timeout var

示例:

amosli@amosli-pc:~$ read -t  var
var
amosli@amosli-pc:~$ echo $var
var

#设置界定符

read -d delim_char var

示例:

read -d ":" var
hello:

2.字段分隔符和迭代器 

内部字段分隔符,Internal Field Separator, IFS

IFS默认为空白字符(换行符,制表符,空格)

data="name,sex,age"
oldIFS=$IFS
IFS=,
for item in $data
do
echo $item
done

输出:

name
sex
age

循环

for循环

for i in {a..z}; do actions; done;

or

for((i=;i<;i++))
{
commands;
}

while循环

while condition
do
commands;
done

until循环,shell中很特殊的一种循环,直到满足条件为止

示例:

amosli@amosli-pc:~/learn$ x=;
amosli@amosli-pc:~/learn$ until [ $x -eq ];#condition
> do let x++; echo $x;
> done

3.比较与测试(if、test)

 if条件:
if conditon;
then
commands;
fi else if 和else;
if condtion;
then
commands;
elif condtion;
then
commands
else
commands
fi

if和else 语句可以进行嵌套。if的条件判断部分可能会变得很长,但可以用逻辑运算符将它变得简洁一些:

[ condition  ] && action ;#如果condition为真,则执行action
[ condition ] || action ; 如果condition为假,则执行action
&&是逻辑与运算符,||是逻辑或运算符

 算术比较:

条件通常是放置在封闭的中括号内。一定要注意在'['或者']'与操作数之间是有一个空格.如果忘记,脚本就会报错。
格式如下:
[ $var  -eq  ]

对变量或者值进行算术条件判断:

-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-ne 不等于
-eq 等于

实例:

amosli@amosli-pc:~/learn$ var=;
amosli@amosli-pc:~/learn$ if [ $var -eq ];
> then
> echo "var的值为0";
> elif [ $var -lt ];
> then echo "var的值小于0";
> else echo "var的值大于0";
> fi
var的值大于0

多条件:

amosli@amosli-pc:~/learn$ if [ $var -ne  -a $var2 -gt  ] ;
then echo "var的值 不等于0并且var2的值大于2";
fi var的值不等于0并且var2的值大于2
amosli@amosli-pc:~/learn$ var=;var2=;
amosli@amosli-pc:~/learn$ if [ $var -eq -o $var2 -eq ];
> then echo "var和var2有一个值为0"
> fi
var和var2有一个值为0

-a,-o  分别表示逻辑与and 和 逻辑或or

文件系统相关测试

 [ -f file_var ]:如果给定的变量包含正常的文件路径或文 件名,则返回真
[ -x $var ] :如果给定的变量包含的文件可执行,则返回真,excute
[ -d $var ] :如果给定的变量包含的是目录,则返回真,directory
[ -e $var ] :如果给定的变量包含的文件存在,则返回真,exist
[ -c $var ] :如果给定的变量包含的是一个字符设备文件的路径,则返回真
[ -w $var ] :如果给定的变量包含的文件可写,则返回真,write
[ -r $var ] :如果给定的变量包含的文件可读,则返回真,read
[ -L $var ] :如果给定的变量包含的是一个符号链接,则返回真

实例:

amosli@amosli-pc:~/learn$ fpath="/home/amosli" ;
amosli@amosli-pc:~/learn$ if [ -e $fpath ];
> then
> echo "yes";
> else echo "no";
> fi
yes

 字符串比较:最好写成双中括号,有时候单个中括号会产生错误'[[  ]]'

= 等于,前后要加上空格,也可以写成 == ,两种写法

amosli@amosli-pc:~/learn$ str1="yes";str2="yes";
amosli@amosli-pc:~/learn$ if [[ $str1 = $str2 ]]
> then
> echo "str1等于str2"
> fi
str1等于str2

!= 不等于

amosli@amosli-pc:~/learn$ if [[ $str1 != $str2 ]] ; then  echo  "str1不等于str2";  else  echo "str1等于str2"; fi
str1等于str2

比较字母顺序的大小:

[[ $str1 > $str2 ]]

[[ $str1 < $str2 ]]

判断是否为空字符串

[[ -z $str1 ]]#是空字符串,zero
[[ -n $str2 ]]#不是空字符串,not zero

使用||,&&进行联合判断:

amosli@amosli-pc:~/learn$ if [[ -n $str1 ]] && [[ -z $str2 ]] ; then echo "str1 is not  empty and str2 is empty"; fi
str1 is not empty and str2 is empty

test命令可以用来执行条件检测

amosli@amosli-pc:~/learn$ if test -n $str1; then echo "str1 is not empty"; fi
str1 is not empty

上面的例子可用 test命令改写为:

amosli@amosli-pc:~/learn$ if test -n $str1 && test -z $str2 ;
> then echo "str1 is not empty and str2 is empty"; fi
str1 is not empty and str2 is empty

linux shell 脚本攻略学习3的更多相关文章

  1. linux shell 脚本攻略学习20--awk命令入门详解

    awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...

  2. Linux Shell脚本攻略学习总结:一

    终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...

  3. linux shell 脚本攻略学习19--sed命令详解

    sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...

  4. Linux Shell 脚本攻略学习--四

    linux中(chattr)创建不可修改文件的方法 在常见的linux扩展文件系统中(如ext2.ext3.ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设 ...

  5. linux shell 脚本攻略学习2

    1.关于文件描述符和重定向: 文件描述符是与一个打开的文件或数据流相关联的整数.文件描述符0.1以及2是系统预留的. 0——stdin(标准输入) 1——stdout(标准输出) 2——stderr( ...

  6. Linux Shell脚本攻略学习总结:三

    根据扩展名切分文件名 首先,我们先来看两个例子: file_jpg="sample.jgp" name=${file_jpg%.*} echo File name is : $na ...

  7. Linux Shell脚本攻略学习总结:二

    比较与测试 程序中的流程控制是由比较和测试语句来处理的. 我们可以用if,if else 以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项.另外,有一个test 命令也可以用来进行测试.让我们 ...

  8. linux shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解

    文件权限详解 一.chmod命令详解 文件权限和所有权是Unix/Linux文件系统最显著的特征之一.linux中的每一个文件都与多种权限类型相关联,在这些权限中主要分类为3种: 用户(User)是文 ...

  9. linux shell 脚本攻略学习18--grep命令详解

    grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是unix/linux中用于文本搜索 ...

随机推荐

  1. JQuery-Dialog(弹出窗口,遮蔽窗口)

    在Ajax中经常用到的弹出窗口和遮蔽窗口.自己写肯定是一个最佳方案,但时间和成本上,还是决定了寻找现成的吧.大概罗列一下.需要我满足我几个条件 一定要简洁方便 拥有遮蔽功能,Model Dialog ...

  2. 文本分类需要CNN?No!fastText完美解决你的需求(后篇)

    http://blog.csdn.net/weixin_36604953/article/details/78324834 想必通过前一篇的介绍,各位小主已经对word2vec以及CBOW和Skip- ...

  3. 在Linux下锁住键盘和鼠标而不锁屏

    假如在你正看着屏幕上的某些重要的事情时,你不想让你的小猫或者小狗在你的键盘上行走,或者让你的孩子在键盘上瞎搞一气,那我建议你试试 xtrlock 这个工具. 假如在你正看着屏幕上的某些重要的事情时,你 ...

  4. Linux中挂载新的磁盘到指定目录或分区

    新增磁盘的设备文件名为 /dev/vdb 大小为100GB. #fdisk -l  查看新增的的磁盘 1.对新增磁盘进行分区 #fdisk /dev/vdb 按提示操作 p打印  n新增 d 删除 w ...

  5. hdu 5411 CRB and Puzzle (矩阵高速幂优化dp)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5411 题意:按题目转化的意思是,给定N和M,再给出一些边(u,v)表示u和v是连通的,问走0,1,2... ...

  6. matlab之simulink仿真入门

    Matlab Simulink仿真工具的应用 ****Simulink是一个用来对动态系统进行建模.仿真和分析的软件包.使用Simulink来建模.分析和仿真各种动态系统(包含连续系统.离散系统和混合 ...

  7. 在CentOS 7上安装Kafka

    简介 Kafka 是一种高吞吐的分布式发布订阅消息系统,能够替代传统的消息队列用于解耦合数据处理,缓存未处理消息等,同时具有更高的吞吐率,支持分区.多副本.冗余,因此被广泛用于大规模消息数据处理应用. ...

  8. 初始化android studio的方法

    有可能是在一次android studio被我强制关闭以后,我的android studio就出现了各种诡异的问题,项目无法运行,新建的项目报错,等等.抓狂~~ 于是想到把android studio ...

  9. Windows 服务安装教程

    一.安装服务1.已管理员的身份启动CMD2.输入 cd C:\Windows\Microsoft.NET\Framework\v4.0.30319 回车3.输入 InstallUtil.exe Win ...

  10. ZH奶酪:Ubuntu 14.04配置LAMP(Linux、Apache、MySQL、PHP)

    ZH奶酪:Ubuntu 14.04安装LAMP(Linux,Apache,MySQL,PHP) 之前已经介绍过LAMP的安装,这边文章主要讲解一下LAMP的配置. 1.配置Apache (1)调整Ke ...