shell之if和else
【shell 中 if 和 else 用法详解】
原文链接:https://www.cnblogs.com/matthewma/p/6995479.html
shell的if语法和C语言等高级语言非常相似,
注意:shell的if语句对空格方面的要求比较严格(其实shell对所有语法的空格使用都比较严格),
如果在需要空格的地方没有打上空格,都会报错。
如if [ $1x == "ip"x ];then echo “abc”;fi中少一个空格都会报错。
shell的if语句必须以fi作为结尾,不然同样会报错。
有else和elif时也一样,注意空格问题
例子:
if [ $1x == "ab"x ]; then
echo “you had enter ab”
elif [ $1x == "cd"x ]; then
echo “you had enter cd”
else
echo “you had enter unexpected word”
fi
【if功能:“对比”】
在C语言等高级语言中,不管是对比字符串、还是对比整型、浮点数等等数据类型,都是使用==、<=等等对比运算符就可以完成。
但是在shell中对比字符串和对比数字,却是要分开两种方式。
对比字符串只能使用==、<、>、!=、-z、-n。
对比字符串时,末尾一定要加上x(或者a、b等)一个字符,因为if [ $1x == “ab"x ]时如果没有了x ,并且$1是”",
这个语句会翻译成if [ == “ab” ],左边相当于没有东西,会报语法错误。
或者使用[[ ]],就不需要x。
使用左尖号<或者右尖号>时,如果是用[ ],需要用转义符"",如>。
对比数字既能使用-eq、-ne、-gt、-ge、-lt、-le,也能使用==、<、>、!=:
-eq是equal
-ne是unequal
-gt是greater than
-ge是greater than or equal to
-lt是less than
-le是less than or equal to
【使用正则表达式】
if在对比时可以使用正则表达式,如if [[ $1 == aa ]](或if [ $1x == aax ])。
如果使用""把aa包起来,就会变成字符,而不是正则表达式中的。
【[和[[的区别】
区别一
在[中使用逻辑运算符,需要使用-a(and)或者-o(or)。在[[中使用逻辑运算符,需要使用&&或者||。
区别二
[是shell命令,在它包围的表达式是它的命令行参数,所以串比较符>和<需要转义,否则就变成io重定向了。
[[是shell关键字,不会做命令行扩展,所以<和>不需要进行转义。
但是语法相对严格,如在[中可以用引号括起操作付,[[则不行。如if [ “-z” “ab” ]。
区别三
[[可以做算术扩展,[则不行。如if [[ 11+1 -eq 100 ]],而if [ 11+1 -eq 100 ]则会报错。
【文件判断】
在高级语言中,判断文件是否存在等各种状态都是需要调用特定的函数进行判断。
而在shell中,这方面就比较方便些,只需要运算符即可。
常用的文件判断运算符如下:
-e 文件是否存在
-f 文件是否是普通文件(不是目录、设备文件、链接文件)
-s 表示文件大小不为0
-d 表示文件是否是目录
-b 表示是块设备(光驱、软盘等)
-c 表示是字符设备(键盘、声卡等)
-p 表示是管道
-h 表示是符号链接
-S 表示是否是socket
-r、-w、-x表示文件是否有可读、可写、可执行权限(指运行这个测试命令的用户)
f1 -nt f2 f1是否比f2新(new than)
f1 -ot f2 f1是否比f2旧(old than)
f1 -ef f2 f1和f2是否是相同文件的硬链接
使用!时表示上述结果取反。
例子:
myfile=“aa.txt”
if [ ! -f $myfile ]; then
echo $myfile" is not exist"
touch $myfile
else
echo $myfile" is exist"
fi
if [ ! -s $myfile ]; then
echo “hello, my master” > $myfile
else
echo $myfile" is not null"
fi
shell之if和else相关推荐
- jar包部署shell脚本编写,在服务器上部署jar包,在Linux服务器上部署服务,设置编码格式,设置内存管理
准备步骤: 1.安装java环境,知道java安装目录 2.将jar包拖放或发送至服务器中(目录自定义) 一.编写shell脚本,将以下代码放在shell脚本中,将shell脚本放在jar包同级目录下 ...
- Linux shell 学习笔记(16)— shell 入门总结
1. Shell 变量 Shell 变量包括自定义变量和环境变量: 自定义变量:脚本中自己命名定义的变量,通常为局部变量,其他 Shell 程序不能访问到: 环境变量,操作系统已定义的变量,如 PAT ...
- 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行
1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...
- Linux shell 学习笔记(12)— linux 信号、后台运行脚本、作业控制、定时运行任务
1. 处理信号 1.1 Linux 信号 常见的 Linux 信号如下表所示: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL ...
- Linux shell 学习笔记(11)— 理解输入和输出(标准输入、输出、错误以及临时重定向和永久重定向)
1. 理解输入和输出 1.1 标准文件描述符 Linux 系统将每个对象当作文件处理.这包括输入和输出进程.Linux 用文件描述符(file descriptor)来标识每个文件对象.文件描述符是一 ...
- Linux shell 学习笔记(10)— 处理用户输入(命令行读取参数、读取用户输入、超时处理)
1. 命令行参数 向 shell 脚本传递数据的最基本方法是使用命令行参数.命令行参数允许在运行脚本时向命令行添加数据. $ ./addem 10 30 本例向脚本 addem 传递了两个命令行参数( ...
- Linux shell 学习笔记(9)— 循环语句(for、while)以及更改字段分隔符
1. for 语句 bash shell 中 for 命令的基本格式如以下,$var 变量包含着这次迭代对应的当前列表项中的值. for var in list docommands done 也可以 ...
- Linux shell 学习笔记(8)— 使用结构化命令(if-then 语句、数值比较、字符串比较、文件比较、case 语句)
1. 使用 if-then 语句 最基本的结构化命令就是if-then语句.if-then语句有如下格式. if command then commands fi 或者 if command; t ...
- Linux shell 学习笔记(7)— 构建基本脚本(变量、重定向、管道、状态码)
1. 使用多个命令 如果要两个命令一起运行,可以把它们放在同一行中,彼此间用分号隔开. $ date ; who Mon Feb 21 15:36:09 EST 2014 Christine tty2 ...
- Linux shell 学习笔记(5)— 文件权限(添加、修改、删除用户及创建、修改群组)
1. Linux的安全性 Linux 安全系统的核心是用户账户.每个能进入 Linux 系统的用户都会被分配唯一的用户账户.用户对系统中各种对象的访问权限取决于他们登录系统时用的账户. 用户权限是通过 ...
最新文章
- Html 教程(2)语法和属性
- SaltStack WEB UI Halite初体验
- oracle cloud认证费用,ORACLE Cloud 创建实例费用提问
- 计算机网络及标准化组织
- ArcEngine中拓扑的使用
- SQL Serve——版本
- Atitit.jsou html转换纯文本 java c# php
- android向DDR读写数据,解决刷机回安卓时提示:Romcode/初始化DDR/读取初始化结果/USB...的问题...
- 小米随身wifi没有网络显示无服务器,小米wifi怎么用 小米随身wifi无法上网怎么办...
- 求助:CISCO2811DHCP中继配置
- MAC下微软Word修改样式为宋体却显示SimSun-Extb的解决办法
- 【美港探案】万物云港股IPO:背靠万科,物业也要搞云?
- OSS对象存储是什么?
- xman_2019_format(非栈上格式化字符串仅一次利用的爆破)
- BZOJ4049 [Cerc2014] Mountainous landscape
- 为什么从移动携号转网到了联通,来电显示是中国移动?
- Generator cannot target libraries that have not been migrated to null-safety.
- 王者荣耀头像大小怎么调?调整图片尺寸大小工具分享
- 步进电机原理及其使用说明
- ironpython 使用-IronPython
热门文章
- python朝圣之路-模块篇
- 分布式事务之Seata个人吐血整理
- raid管理软件MegaRAID Storage Manager(MSM)的安装和使用
- magnifierrentgen(放大镜)插件的使用
- Linux中vi上下键变成ABCD
- 有道 - 词典在线发音API链接(日语)
- 车企如何趟过「软件的坑」,大众集团或将在中国寻求收购
- warning: waiting for transaction lock on /var/lib/rpm/.rpm.lock
- 如何看待Facebook 中国程序员之死:年仅 38 岁跳楼轻生,浙大 EE 毕业生,去年刚入职...
- 火山引擎 RTC 自研音频编码器 NICO 实践之路