linux shell 脚本攻略学习3
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的更多相关文章
- linux shell 脚本攻略学习20--awk命令入门详解
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
- Linux Shell脚本攻略学习总结:一
终端打印 终端打印的常用命令有两个:echo和print 首先,我先介绍echo 1.echo echo这个命令接受三种形式的参数,实例如下: echo "Hello World" ...
- linux shell 脚本攻略学习19--sed命令详解
sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...
- Linux Shell 脚本攻略学习--四
linux中(chattr)创建不可修改文件的方法 在常见的linux扩展文件系统中(如ext2.ext3.ext4等),可以将文件设置为不可修改(immutable).某些文件属性可帮助我们将文件设 ...
- linux shell 脚本攻略学习2
1.关于文件描述符和重定向: 文件描述符是与一个打开的文件或数据流相关联的整数.文件描述符0.1以及2是系统预留的. 0——stdin(标准输入) 1——stdout(标准输出) 2——stderr( ...
- Linux Shell脚本攻略学习总结:三
根据扩展名切分文件名 首先,我们先来看两个例子: file_jpg="sample.jgp" name=${file_jpg%.*} echo File name is : $na ...
- Linux Shell脚本攻略学习总结:二
比较与测试 程序中的流程控制是由比较和测试语句来处理的. 我们可以用if,if else 以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项.另外,有一个test 命令也可以用来进行测试.让我们 ...
- linux shell 脚本攻略学习12--文件权限详解,chmod命令详解,chown命令详解,chattr命令详解
文件权限详解 一.chmod命令详解 文件权限和所有权是Unix/Linux文件系统最显著的特征之一.linux中的每一个文件都与多种权限类型相关联,在这些权限中主要分类为3种: 用户(User)是文 ...
- linux shell 脚本攻略学习18--grep命令详解
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是unix/linux中用于文本搜索 ...
随机推荐
- diy作品——视觉追踪小车介绍
最近刚刚完毕了一个追踪功能的小车.大体功能例如以下:小车能通过网线给电脑传图(抱歉.临时没搞wifi驱动).并在电脑端通过鼠标选中待跟踪的目标,然后小车就開始追踪.由于追踪框有缩放功能.所以也能推断物 ...
- Documentation/PCI/pci-iov-howto.txt
Chinese translated version of Documentation/PCI/pci-iov-howto.txt If you have any comment or update ...
- MFC对话框:模态对话框及其弹出过程
From: http://www.jizhuomi.com/school/c/160.html 加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨 ...
- HTTP 响应实体主体:XML 及 XML parser
本文内容 HTTP 响应实体主体:XML XML parser 总结 各编程语言实现的 XML parser HTTP 响应实体主体:XML 实体主体(entity-body)通常是HTTP响应里 ...
- 查看oracle的sql语句历史记录和锁表的情况
查看oracle的sql语句历史记录和锁表的情况 (2012-01-04 20:59:59) 转载▼ 标签: 杂谈 分类: database 查询sql的历史记录 select * from v$sq ...
- python抓取数据,python使用socks代理抓取数据
在python中,正常的抓取数据直接使用urllib2 这个模块: import urllib2 url = 'http://fanyi.baidu.com/' stream = urllib2.ur ...
- 分布式系统介绍-PNUTS
PNUTS是Yahoo!的分布式数据库系统,支持地域上分布的大规模并发操作.它根据主键的范围区间或者其哈希值的范围区间将表拆分为表单元(Tablet),多个表单元存储在一个服务器上.一个表单元控制器根 ...
- Summarizing NUMA Scheduling两篇文章,解释得不错
http://vxpertise.net/2012/06/summarizing-numa-scheduling/ Sitting on my sofa this morning watching S ...
- Spark GraphX实例(1)
Spark GraphX是一个分布式的图处理框架.社交网络中,用户与用户之间会存在错综复杂的联系,如微信.QQ.微博的用户之间的好友.关注等关系,构成了一张巨大的图,单机无法处理,只能使用分布式图处理 ...
- RN API备忘
1:Alert:启动一个提示对话框,包含对应的标题和信息. 2:Animated:动画效果. 3:AppRegistry:React Native应用的入口.应用的根组件应当通过AppRegistry ...