Linux 基础知识(一) shell的&&和|| 简单使用

  shell 在执行某个命令的时候,会返回一个返回值,该返回值保存在 shell 变量 $? 中。当 $? == 0 时,表示执行成功;当 $? == 1 时,表示执行失败。  有时候,下一条命令依赖前一条命令是否执行成功。如:在成功地执行一条命令之后再执行另一条命令,或者在一条命令执行失败后再执行另一条命令等。shell 提供了 && 和 || 来实现命令执行控制的功能,shell 将根据 && 或 || 前面命令的返回值来控制其后面命令的执行。    

 

&&(命令执行控制)    

语法格式如下:        

  command1 && command2 [&& command3 ...]    

1 命令之间使用 && 连接,实现逻辑与的功能。  

2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。  

3 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。  

#demo1

www@ubuntu4:~/bin/lua$ ls
lua.sh
www@ubuntu4:~/bin/lua$ cp ./lua.sh ./lua_cp.sh && rm ./lua.sh && echo "success"
success
www@ubuntu4:~/bin/lua$ ls
lua_cp.sh

说明:命令首先从 /home/www/bin/lua/lua.sh 文件复制 到当前目录重命名为lua_cp.sh,执行成功后,使用 rm命令 删除源文件lua.sh;如果删除成功则输出提示信息。

 

||(命令执行控制)

语法格式如下:
  command1 || command2 [|| command3 ...] 

1 命令之间使用 || 连接,实现逻辑或的功能。
2 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。
3 只要有一个命令返回真(命令返回值 $? == 0),后面的命令就不会被执行。

#demo1

www@ubuntu4:~/bin/lua$ ls
lua_cp.sh
www@ubuntu4:~/bin/lua$ rm ./tinywan.sh && echo "success" || echo "fail"
rm: cannot remove ‘./tinywan.sh’: No such file or directory
fail

说明:目录下不存在文件 tinywan.sh,将输出提示信息“fail”,删除失败

#demo2

www@ubuntu4:~/bin/lua$ ls
lua_cp.sh
www@ubuntu4:~/bin/lua$ rm ./lua_cp.sh && echo "success" || echo "fail"
success
www@ubuntu4:~/bin/lua$ ls
www@ubuntu4:~/bin/lua$ 

说明:目录下存在文件tinywan.sh,将输出提示信息“success”,删除成功

 

$0   当前脚本的文件名
$1 ~ $n?   位置参数,为从1开始的数字,当n超过9后,使用${n},例如${10},$1是第一个参数,$2是第二个参数,${10}是第十个参数
$#   传入脚本的参数的个数
$*   所有的位置参数,但视为一个字符串
$@   所有以空白隔开的位置参数,即代表各位置参数组成的串行(每个都作为独立的字符串,可用  “for 变量 in 串行” 循环输出)。
$?   当前Shell进程中,上一个命令的返回值,如果上一个命令成功执行则$?的值为0,否则为其他非零值,常用做if语句条件
$$   当前Shell进程的pid
$!   后台运行的最后一个进程的pid
$-   显示Shell使用的当前选项
$_   之前命令的最后一个参数

#demo1

#!/bin/bash
echo "\$# = 传入脚本的参数的个数: $#"
echo "\$0 = 当前脚本的文件名: $0"
echo "\$1 = first : $1"
echo "\$2 = second: $2"
echo "\$@ = 所有以空白隔开的位置参数: $@"
echo "\$* = 所有的位置参数,但视为一个字符串: $*"
echo "\$$ = 当前Shell进程的pid process id: $$"
echo "\$? = 当前Shell进程中,上一个命令的返回值: $?"

执行结果:

www@ubuntu4:~/bin$ ./test2.sh var1 var2 var3 var4 var5 var6
$# = 传入脚本的参数的个数: 6
$0 = 当前脚本的文件名: ./test2.sh
$1 = first : var1
$2 = second: var2
$@ = 所有以空白隔开的位置参数: var1 var2 var3 var4 var5 var6
$* = 所有的位置参数,但视为一个字符串: var1 var2 var3 var4 var5 var6
$$ = 当前Shell进程的pid process id: 167270
$? = 当前Shell进程中,上一个命令的返回值: 0

在 [[ 判断式 ]] 中,如果使用 == 或 != ,且在这两个运算符右方的字符串没有加上单引号或双引号,则 == 和 != 会视为想要对比该字符串所形成的“样式”,如果相等,传回0,如果不符,传回1。

#!/bin/bash

a="str"
if [[ $a == ??? ]]; then
    echo "Match"
fi

行4,[[ $a == ??? ]] 的意思是说,用 $a 的值,对比样式 ??? (3个字符的字符串)。

但如果把行4改成:

if [[ $a == "???" ]]; then

那意思就不同了,此时 == 变成了是判断 $a 和 字符串 ??? 是否相等。

linux在shell中获取时间

 

时间: 2024-08-03 12:49:20

Linux 基础知识(一) shell的&&和|| 简单使用的相关文章

Linux基础知识之————shell学习总结之变量引用

http://blog.csdn.net/wirelessqa/article/details/19285173   http://www.cnblogs.com/barrychiao/archive/2012/10/22/2733210.html

《树莓派渗透测试实战》——第1章 树莓派和Kali Linux基础知识

第1章 树莓派和Kali Linux基础知识 树莓派渗透测试实战Kali Linux的用户包括全球各地的安全专家.黑客们和研究者,是最受欢迎的渗透测试平台之一,主要用于安全和漏洞评估.攻击研究和风险测试.Kali Linux包含众多流行的开源工具,适用于渗透测试的方方面面.Kali Linux的前身是BackTrack 5 R3,然后逐渐进化到一套完整的Linux桌面系统. 树莓派电脑以超低价著称,它使用HDMI(高清晰度多媒体接口,High Definition Multimedia Inte

Linux基础知识99问(三)_unix linux

    三. 走进Linux殿堂:35问 20.安装Linux,对硬件有什么要求? Linux对硬件要求很低,可以运行在386以上CPU,8M以上内存的IBM PC机上.但由于设备厂商的支持力度不够,所以Linux倒是对很多新设备的支持不是很好,新设备的驱动程序总是慢一步. 21.安装Linux需要做哪些准备? 1) 收集系统资料:记录下内存大小,CDROM接口类型,SCSI卡型号,网卡型号,鼠标类型,显卡芯片组.时钟芯片.显存大小等相关信息: 2) 检查CMOS设置,关闭病毒开发,设置其从光驱

Linux 脚本编写基础知识_linux shell

1. Linux 脚本编写基础 1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须放在文件的第一行):#!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执行:编译 chmod +x filename 这样才能用./filename 来运行 1.1.2 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束.我们真诚地建议您在程

linux基础知识总结

            接触Linux大概一个星期左右,自己对Linux也只是初识,只装了Ubuntu,其他的还没有试过,只是看了点书和视频,因此总结让知识稍微有些秩序. 1.用户与用户组         Linux是多用户,多任务的操作系统,这意味着多人可以同时使用一台主机.因为每个用户的个人喜好与隐私问题,文件的所有者就显得尤为重要.将用户分为不同的组别当然是为了方便管理.因此用户与文件之间的关系就有三种:(1)User:表示该用户是文件的所有者.(2)Group:表示该用户和文件的所有者在

Java核心技术卷I基础知识3.1 一个简单的Java应用程序

第3章 Java的基本程序设计结构 ▲  一个简单的Java应用程序     ▲  字符串 ▲  注释                      ▲  输入输出 ▲  数据类型               ▲  控制流 ▲  变量                      ▲  大数值 ▲  运算符                  ▲  数组   现在,假定已经成功地安装了JDK,并且能够运行第2章中给出的示例程序.我们从现在开始将介绍Java应用程序设计.本章主要介绍程序设计的基本概念(如数

Linux基础命令:Shell详解

在学习Linux的过程中,经常会听到Shell这个词.可能大家在使用Windows的时候有这种感觉,我要听歌,我打开一个播放器,那么音箱就可以出声音,要打印一片文档,我们只要在程序中点击一下打印按钮,打印就会自动的把文档打印出来.但是我们并没有自己手动的控制音箱和打印机等http://www.aliyun.com/zixun/aggregation/11585.html">硬件设备,是因为系统已经为我们作好了.其实我们可以把Windows叫做Shell,我们不用知道打印机的原理,也不需要自

Linux基础知识99问(二)_unix linux

    二. Linux大观:7问 13.RedHat Linux 6.5和Linux 2.4哪个版本高? 最近许多报刊.网站都介绍了Linux的最新版 2.4怎样,怎样?而许多Linux初学者正在使用的是RedHat Linux 6.5版.哪个版本更高? 其实,这两个版本号是不同的!RedHat Linux是将Linux内核与Linux的一些常用配套软件.应用软件捆绑在一起的发行版,6.5是这个发行版的版本号.而Linux 2.4则是指Linux内核的版本. Linux核心是由linus维护的

Linux基础知识99问(一)_unix linux

1.什么是Linux? Linux是一个诞生于网络.成长于网络且成熟于网络的奇特的操作系统.1991年,芬兰大学生Linus Torvalds萌发了开发一个自由的UNIX操作系统的想法,当年,Linux就诞生了, 为了不让这个羽翼未丰的操作系统夭折,Linus将自已的作品Linux通过Internet发布.从此一大批知名的.不知名的电脑黑客.编程人员加入到开发过程中来,Linux逐渐成长起来. Linux一开始是要求所有的源码必须公开,并且任何人均不得从Linux交易中获利.然而这种纯粹的自由软