Linux

414 阅读9分钟

终端

终端的默认目录

打开终端后,可以看到一个波浪号~,表示当前在HOME目录,也就是终端打开后的默认目录是Home目录。 Home目录就是/Users/username目录。

pwd # (print work directory)打印当前的工作目录 /Users/username

cd .. # 返回上一层目录
cd / # 进入根目录
cd ~ # 进入Home目录

open . # 打开当前目录
open .. # 打开上一层目录
open / # 打开根目录
open ~ # 打开Home目录

在终端中使用鼠标移动光标

Mac 终端使用鼠标来移动光标 在终端输入一串指令,如果想修改中间的内容,可以通过以下方法快速移动光标。

ctrl + a # 移至行首 默认终端和item2都支持
ctrl + e # 移至行末
option + up/down # 往前/往后移动一个单词 仅默认终端支持
按住option,点击鼠标移动光标到指定位置 # 都支持

/usr目录

Linux下 目录/usr缩写 及 目录结构说明

现代的 /usr 只专门存放各种程序和数据,用户目录已经转移。虽然 /usr 名称未改,不过其含义已经从“用户目录”变成了“unix 系统资源”目录。值得注意的是,在一些 unix 系统上,仍然把 /usr/someone 当做用户家目录,如 Minix。

/usr/bin : 所有可执行文件,如 gcc,firefox 等(指不包含在 /sbin 和 /bin 内的);

/usr/include : 各种头文件,编译文件等时需要使用; /usr/lib : 所以可执行文件所需要的库文件;

/usr/local : /usr 通常只包含系统发行时自带的程序,而 /usr/local 则是本地系统管理员用来自由添加程序的目录;

该目录是隐藏目录,通过command+shift+.来显示。

环境变量

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

echo $HOME # 该环境变量表示当前登录用户的主文件夹,也就是HOME目录
echo $HOME/bin # 表示HOME目录下的bin目录
echo $PATH # 路径环境变量
# 打印出的path环境变量:/Users/daming/bin:/Users/daming/.nvm/versions/node/v16.14.2/bin:/opt/homebrew/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/puppetlabs/bin 
# path环境变量的值是以:分割的多个路径
export PATH=/opt/local/bin:/opt/local/sbin:$PATH # 设置path环境变量,其中export指令将变量提升为环境变量,$PATH是原路径变量的值

Shell

认识shell

Shell 是用来解决什么问题的?

操作系统对外提供的接口是“系统调用”,也就是一堆编程用的接口。这些接口一般以C函数的形式暴露给使用者。通过这些接口,开发者可以命令操作系统“启动一个进程”,“查找某个目录下的所有文件”.

实际上我们平时编程用的是对系统调用的包装,比如libc里的那些库函数。但无论如何,你总是得写代码才能使用它们。

比如你想知道一个目录下的所有文件,你肯定不会去写一段C代码,调用系统调用“readdir” ,然后gcc编译,然后运行。真这么干,一个最简单的工作也要耗费很长时间。

有个负责把用户输入的字符串转换到需要执行的程序,并把结果以某个形式画出来的东西,就叫做“Shell”,即帮你更方便使用操作系统接口的“壳”。这个词与操作系统内核(Kernel)对应。

在Linux中,bash负责按照某种格式把用户的输出的字符串翻译,比如对于普通非空字符翻译为程序和参数,并尝试去PATH里找对应的程序;对“空格”翻译成分隔符;对“$XXX”尝试进行环境变量的替换;对“|”翻译为管道;对 “>”翻译为输出重定向;对一个指令末尾的“&”翻译为将程序转到后台执行…… 另一方面终端将stdout、stderr输出的东西画成我们可以看的一坨坨字符,包括字符、字体、颜色、换行、甚至响铃。 【bash】 + 【终端】大概可以理解为一个以字符为交互方式的“Shell”。

当然,大家会更习惯上说“bash”是一个“Shell”。也许是因为bash大家用的不爽可以换,可以改变配置,可以编程。总之玩法很多。但是对终端一般不怎么理会,默认的就够用了。

除了bash,还有像csh,zsh等,虽然各自的规定有些区别,但干的事情就是这些。Windows里一般等价的就是cmd,与Linux这边相比弱鸡得很。不过Windows有自己的PowerShell,也可以通过cygwin或者linux subsystem的方式使用bash。

shell 是用来解决用户如何与操作系统通信的问题。 shell 就是 壳,区别于 核。

Linux 的 核 叫 kernel , 壳有很多种,有命令行的: bash 、sh 、csh 、ksh, 有图形化的: KDE、GNOME、CDE、 XFCE 。

在这里插入图片描述

不同的解释器

/bin/bash和/bin/sh的区别

.bashrc .profile .zshrc .bash_profile 区别

.bashrc .profile .zshrc .bash_profile 区别

.zshrc文件与.bashrc文件作用

What is the purpose of .bashrc and how does it work?

.bashrc # 系统启动后就会自动运行,一般配置写命令别名、路径等
.profile # 用户登录后才会运行。
.zshrc # zsh终端命令工具的全局变量设置,和bashrc类似。默认很多linux系统是base,就配置在bashrc里,如果是使用zsh 就配置在 zshrc里。
.bash_profile # 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

这些配置文件一般在Home目录下。

执行shell脚本

Linux shell执行source和 . 的区别

 bash test.sh
 source test.sh # source和 . 这两个都是shell自带的内建命令,这两个命令是等价的关系。
 . test.sh # 这两个命令是会由父shell创建子进程去执行shell脚本,并且特别关键的一点,它会继承所有父shell的环境变量。
 ./test.sh
type source 
# source 是 shell 内建
type .
# . 是 shell 内建
help source
help .

./ + shell script

./这个方法在linux世界是用来执行一切可执行文件的方法,不仅仅可以用来执行shell脚本。需要特别注意的是 ./ 并不等于 . 符号,两者是具有本质区别的。 ./ 这个符号后面需要跟一个可执行文件的路径,用于定位执行文件的位置,这个路径可以是相对路径。那么如何区分不同的可执行文件呢?对于shell脚本来说,我们会在开头加上:

#! /bin/bash

代表着这是一个需要使用bash shell来进行解释的脚本,当然同样的方式也适用于其他语言,比如python:

#!/bin/python

这里的#!是具有异常魔力的标志,我们叫他magic number。它是用来区分不同类型可执行文件的一种方式。注意#!后面必须要加上对应的解释器路径,并且必须是正确的路径。否则可能会执行失败。

当然还有一种情况,假如我的系统安装了不同类型shell,那么要如何执行我的脚本使用不同shell来执行呢?实际上脚本中的magic number后指定的只是该脚本默认的执行shell,当我们使用 ./ 来执行时,就会使用默认的shell。如果此时使用显式的方式,那么是会覆盖默认解释器的。 比如我们在脚本中第一行使用mksh作为解释器,那么我通过./执行的时候,会查找mksh解释器,如果没有安装解释器mksh,则会报错。

#! /bin/mksh

但是在执行是使用如下命令,那么该脚本使用bash shell来运行。

bash test.sh

Linux命令大全

shell中输入多行命令

输入多行

image.png

使用 反斜杠(\)续行

反斜杠除了作为转义字符外,如果把他放在一行的回车符换行之前,表示下一行续此行被视为同一行,可以用于表示长的输入行。

$ echo a="10"
$ echo $a \
> $PATH # 续上一行,表示 echo $a $PATH

使用;运行多条指令

无论你输入多少条指令都还会按顺序一一执行,就算有指令执行失败也会继续执行后面的指令

$ cmd1 ; cmd2 ; cmd3

使用&&运行多条指令

首先执行cmd1,cmd1执行成功之后才执行cmd2,cmd2执行成功之后再执行cmd3。前一条指令执行失败,则后面的指令都不会执行。

$ cmd1 && cmd2 && cmd3

使用||运行多条指令

首先执行cmd1,当cmd1执行失败时执行cmd2,当cmd2失败时执行cmd3。前一条指令执行成功,则后面的指令都不会执行。

$ cmd1 || cmd2 || cmd3

shell变量

Linux变量和引用详解

什么是变量

变量用于保存有用信息,如路径名、文件名、数字等,Linux用户使用变量定制其工作环境,使系统获知用户相关的配置。 变量可分为:本地变量、环境变量和位置参数。

(1) 本地变量是仅可以在用户当前Shell生命期的脚本中使用的变量,本地变量随着Shell进程的消亡而无效,本地变量在新启动的Shell中依旧无效,它类似于C、C++、Java等编程语言中局部变量的概念。本地变量中包含环境变量,Linux的本地变量的非环境变量不具备继承性。​

(2) 环境变量则适用于所有由登录进程所产生的子进程,简言之,环境变量在用户登录后到注销之前的所有编辑器、脚本、程序和应用中都有效。新的环境变量通过export命令来定义。Linux的环境变量具有继承性,即子Shell会继承父Shell的环境变量。​

(3) 位置参数也属于变量,它由于向Shell脚本传递参数,是只读的。

变量的替换和赋值

Shell的三类变量中,位置参数是只读变量,因此,没有变量的替换和赋值操作,其他两类变量都存在替换和赋值。

变量是某个值的名称,引用变量值就称为变量替换,$ 符号是变量替换符号,如variable是变量名,那么,$variable${variable}就表示变量的值。

对于变量赋值,有以下说明:

(1)赋值语句等号两边不能出现空格,否则会报command not found的错误,shell会把变量名当作一个命令执行。

(2)如果值(value)中包含空格,则必须用双引号括起来;

(3)变量名只能包括大小写字母、数字(0~9)、下滑杠(_)等符号,并且变量名不能以数字开头,否则视为无效变量名。

(4) 变量区分大小写,HOME和home是两个不同的变量

# 变量赋值的两种格式
variable=able
${ variable=value }

除了使用等号进行变量赋值以外,变量赋值还有下面几种模式:​

模 式意 义
variable=value将值赋给变量variable
variable+value对已赋值的variable,重设其值
variable?value或variable:?value对未赋值的variable,显示系统错误信息
variable:=value对未赋值的variable,将值value值赋给它
variable:-value对未赋值的variable,将值value值赋给它,但value值不存储到variable对应的地址空间

变量的清除

利用unset命令可以清除变量的值,不管这个变量是环境变量还是本地变量。命令格式为:unset 变量名

环境变量

环境变量文件

在shell的命令行下直接定义的变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。​

如果只是临时用一下,可以直接在shell下用export命令设定环境变量;如果希望此环境变量每次开机或打开Shell时自动设定而无须每次都手动设定,那么需要将export命令写入环境变量配置文件中。Linux下,环境变量被分别保存在多个环境变量文件中,当你进入系统的时候,这些环境变量文件是按照下面的顺序读取的:​

(1)/etc/environment​​文件​​

​ 设置整个系统的环境信息,​​在系统启动时被读取​​,与登录用户无关。​

(2)/etc/profile​​文件​​

​ 为系统的每个用户设置环境信息,​​任何用户每次登录时执行该文件​。​

(3)/​​etc/bashrc​​文件​​

​ 是针对所有用户的bash Shell初始化文件,​任何用户每次登录或打开新的Shell时执行该文件​。在执行完/etc/profile 内容之后,如果用户的Shell运行的是bash shell,那么接着就会执行此文件。​

(4) ~/.bashrc​​文件​​

​ 该文件包含专用于你的bash shell的bash信息,​在用户每次登录时或打开新的Shell时执行该文件​。​

​ ​(5)~/.bash_profile​​文件​​

​ 每个用户都可使用该文件保存专用于自己使用的shell信息,​​在用户每次登录时执行该文件​。​

​ 注意:在不同Linux中,这个文件的名字不同,可能的名字有~/.bash_profile、~/.bash_login、~/.profile其中的一种或者几种。如果都存在的话,执行的顺序为~/.bash_profile、~/.bash_login、~/.profile。​

(6) ~/.bash_logout​​文件​​

​ ​在用户每次退出登录的时候执行该文件​。​

​ 其中 /etc/environment文件、/etc/profile文件、/etc/bashrc文件是针对所有用户的。~/.bashrc文件、~/.bash_profile文件、~/bash_logout文件在每个用户的主目录(HOME目录)下都存在,是针对特定用户的(哪个用户的主目录就针对哪个用户)。​

例如,编辑/etc/profile文件,添加CLASSPATH变量:​

 # vi /etc/profile​

添加内容如下:​

export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib​

注:修改文件后要想马上生效还要运行#source /etc/profile,不然只能在下次重进此用户时生效。

重要的环境变量

BASH记录了bash Shell的路径,通常为/bin/bash,内部变量SHELL就是通过BASH的值确定当前Shell的类型。

SHELL和BASH

SHELL变量保存默认的Shell值,默认的值为/bin/bash,表示当前的Shell是bash Shell。如果有必要用另一个Shell,则需要重置SHELL变量值。​

echo $BASH
echo $SHELL

PATH

PATH是Linux中一个极为重要的环境变量,它用于帮助Shell找到用户所输入的命令。用户所输入的每个命令实际是是一个源代码文件,计算机执行这个文件里的代码以实现这个命令的功能,这些源代码文件称为可执行文件。可执行文件存在于各种各样的目录下,一些可执行文件放置在Linux系统标准目录中,还有一些可执行文件可能是用户写得的序或Shell脚本文件,他们放置在用户目录中。PATH就记录了一系列的目录列表,Shell为每个输入命令搜索PATH中的目录列表。​

下面显示了PATH环境变量的内容,可以看到,PATH中包含了多个目录的路径,它们之间用冒号分割,都是以bin或sbin的文件夹结尾,bin或sbin是Linux中存放可执行文件的文件夹。任何在PATH的可执行文件都可以在Linux系统的任何目录中直接执行。

echo $PATH # 打印
export  PATH="/new directory":$PATH # 添加

HOME

HOME记录当前用户的根目录。root用户的根目录时/root,其他用户的根目录都存放在/home目录下,通常以用户名命名。

PWD和OLDPWD

PWD记录当前的目录路径,当利用cd命令改变当前目录时,系统自动更新PWD的值,OLDPWD记录旧的工作目录,即用户所处的前一个目录。

定义一个环境变量

#定义环境变量的基本格式
ENVIRON-VARIABLE=value        #声明一个变量
export ENVIRON-VARIABLE        #提升为环境变量

打印环境变量

# 打印全部环境变量,两种方式
env 
print env
# 打印单个环境变量
echo $PATH

打印当前shell的所有变量(环境变量,自定义变量,与bash接口相关的变量)

set

位置变量

位置参数(positional parameters)是一种特殊的Shell变量,用于从命令行向Shell脚本传递参数,1表示第1个参数、1表示第1个参数、2表示第2个参数等,0为脚本的名字,从0为脚本的名字,从{10}开始,参数号需要用花括号起来,如10{10}、{11}、100...{100}、...。*和@一样,表示从@一样,表示从1开始的全部参数。​

Shell还定义了一些特殊的位置参数:

特殊位置参数意义
$#传递到脚本的参数数量
*和@传递到脚本的所有参数
$$脚本运行的进程号
$?命令的退出状态,0表示没有错误,非0表示有错误

在shell脚本文件中使用变量

  1. 新建文件/Users/username/Desktop/workspace/test.sh
#!/bin/bash
test="Today is Sunday!"
echo $test
echo "Hello World !"
pwd # pwd是一条指令,作用是获取当下的绝对路径
echo $PWD # $PWD变量表示当前的绝对路径
echo $(pwd) # $(pwd)返回当前的绝对路径
echo $HOME # 用户主目录
  1. 执行文件
# 进入workspace文件夹后
chmod +x ./test.sh # 授予执行权限
./test.sh # 执行
  1. 打印结果
Today is Sunday!
Hello World !
/Users/username/Desktop/workspace
/Users/username/Desktop/workspace
/Users/username/Desktop/workspace
/Users/username

shell常用命令

export命令 – 将变量提升成环境变量

www.linuxcool.com/export

vim

VIM中的保存和退出、VIM退出命令、如何退出vim编辑、VIM命令大全 Linux vi/vim Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 在这里插入图片描述 常用的ex(退出)命令

# 退出命令是,按ESC键 跳到命令模式,然后输入:q(不保存)或者:wq(保存) 退出。
:w 保存文件但不退出vi
:w file 将修改另外保存到file中,不退出vi
:w! 强制保存,不推出vi
:wq 保存文件并退出vi
:wq! 强制保存文件,并退出vi
:q 不保存文件,退出vi
:q! 不保存文件,强制退出vi
:e! 放弃所有修改,从上次保存文件开始再编辑命令历史

进入编辑模式

i 在当前位置生前插入
I 在当前行首插入
a 在当前位置后插入
A 在当前行尾插入
o 在当前行之后插入一行
O 在当前行之前插入一行

cat命令 - 在终端设备上显示文件内容

语法格式:cat [参数] 文件 原文链接:www.linuxcool.com/cat

touch - 创建空文件与修改时间戳

touch命令的功能是用于创建空文件与修改时间戳。如果文件不存在,则会创建出一个空内容的文本文件;如果文件已经存在,则会对文件的Atime(访问时间)和Ctime(修改时间)进行修改操作,管理员可以完成此项工作,而普通用户只能管理主机的文件。

touch File.txt # 创建出一个指定名称的空文件
touch File{1..5}.txt # 结合通配符,创建出多个指定名称的空文件:

原文链接:www.linuxcool.com/touch

mkdir - 创建目录

mkdir命令来自英文词组make directories的缩写,其功能是创建目录文件。该命令的使用简单,但需要注意,若要创建的目标目录已经存在,则会提示已存在而不继续创建,不覆盖已有文件。若目录不存在,但具有嵌套的依赖关系时,例如/Dir1/Dir2/Dir3/Dir4/Dir5,要想一次性创建则需要加入-p参数,进行递归操‍作。

原文链接:www.linuxcool.com/mkdir

which - 查找命令文件

which命令的功能是用于查找命令文件,能够快速搜索二进制程序所对应的位置。如果我们既不关心同名文件(find与locate),也不关心命令所对应的源代码和帮助文件(whereis),仅仅是想找到命令本身所在的路径,那么这个which命令就太合适了。

 daming@KDXNXXXXX  /Users  which node
/Users/daming/.nvm/versions/node/v16.14.2/bin/node
 daming@KDXNXXXXX  /Users  which npm
/Users/daming/.nvm/versions/node/v16.14.2/bin/npm
 daming@KDXNXXXXX  /Users  which yarn
/Users/daming/.nvm/versions/node/v16.14.2/bin/yarn
 daming@KDXNXXXXX  /Users  npm -g bin
/Users/daming/.nvm/versions/node/v16.14.2/bin

find - 根据路径或条件搜索指定文件

find <目录名>  #将对应目录下的子孙文件&子孙目录平铺在控制台 
find <目录名> -type f  #将对应目录下的文件平铺在控制台 

rm - 删除文件或目录

语法 rm [options] name...

参数:

-i 删除前逐一询问确认。

-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。

-r 将目录及以下之档案亦逐一删除。

# rm  test.txt 
rm:是否删除 一般文件 "test.txt"? y  
# rm  homework  
rm: 无法删除目录"homework": 是一个目录  
# rm  -r  homework  
rm:是否删除 目录 "homework"? y 
# rm  -rf  homework

mv – 移动或改名文件

mv命令来自于英文单词move的缩写,其功能与英文含义相同,用于对文件进行剪切和重命名。 语法格式:mv [参数] 源文件 目标文件 常用参数:

-i 若存在同名文件,则向用户询问是否覆盖

-f 覆盖已有文件时,不进行任何提示

-b 当文件存在时,覆盖前为其创建一个备份

-u 当源文件比目标文件新,或者目标文件不存在时,才执行移动此操作

原文链接:www.linuxcool.com/mv

cp - 复制文件或目录

cp命令来自于英文单词copy的缩写,用于将一个或多个文件或目录复制到指定位置,亦常用于文件的备份工作。-r参数用于递归操作,复制目录时若忘记加则会直接报错,而-f参数则用于当目标文件已存在时会直接覆盖不再询问,这两个参数尤为常用。

语法格式:cp [参数] 源文件 目标文件

常用参数:

-f 若目标文件已存在,则会直接覆盖原文件

-i 若目标文件已存在,则会询问是否覆盖

-p 保留源文件或目录的所有属性

-r 递归复制文件和目录

原文链接:www.linuxcool.com/cp

echo 输出字符串

echo 'test content' #往控制台输出信息 
echo 'test content' > test.txt #新建文件test.txt

pwd - 打印当前工作目录的路径

ln - 为文件创建快捷方式

ln命令来自于英文单词link的缩写,中文译为“链接”,其功能是用于为某个文件在另外一个位置建立同步的链接。Linux系统中的链接文件有两种形式,一种是硬链接(hard link),另一种是软链接(symbolic link)。软连接相当于Windows系统中的快捷方式文件,原始文件被移动或删除后,软连接文件也将无法使用,而硬链接则是通过将文件的inode属性块进行了复制 ,因此把原始文件移动或删除后,硬链接文件依然可以使用。

语法格式: ln [参数] 源文件 目标文件

常用参数:

-s 对源文件建立符号链接,而非硬链接

原文链接:www.linuxcool.com/ln

ls - 显示指定工作目录下的文件及属性信息

ls是最常被使用到的Linux命令之一,来自于英文单词list的缩写,也正如list单词的英文意思,其功能是列举出指定目录下的文件名称及其属性。 默认不加参数的情况下,ls命令会列出当前工作目录中的文件信息,经常与cd和pwd命令搭配使用,十分方便。而带上参数后,我们则可以做更多的事情,作为最基础、最频繁使用的命令,有必要仔细了解下其常用功能。

语法格式: ls [参数] [文件]

常用参数:

-a 显示所有文件及目录 (包括以“.”开头的隐藏文件)

-l 使用长格式列出文件及目录的详细信息

-i 输出文件的inode节点信息

--color 输出信息中带有着色效果

原文链接:www.linuxcool.com/ls

ll - 显示指定文件或目录的详细属性信息

实际它不是一个真实存在的命令文件,而是”ls -l --color=auto“的别名而已。ll命令可以默认列出当前目录内文件的详细属性信息,包含权限、所属、修改时间以及容量占用大小等等信息。

语法格式:ll [参数] 文件

常用参数: -a 列出目录下的所有文件(含隐藏文件)

原文链接:www.linuxcool.com/ll

open(MacOS)

open . # 打开Finder
open ~/Documents # 打开指定目录
open document.pdf # 使用默认程序打开执行文件

env

如果env后面带有命令command,那表示在某些环境变量下执行command命令,env会去PATH中去找相应的command命令,然后执行。使用举例:

env # 打印全部环境变量
env ./myprogram #启动myprogram程序
env HEAPPROFILE=./myprogram.hprof ./myprogram #在环境变量HEAPPROFILE为./myprogram.hprof时,执行myprogram程序

set和unset

set命令可以设置各种Shell选项或者显示当前本地变量。​

该命令的一般格式:set [参数]

-a 标示已修改的变量,以供输出至环境变量。

-b 使被中止的后台程序立刻回报执行状态。

-C 转向所产生的文件无法覆盖已存在的文件。

-e 若指令传回值不等于0则立即退出

.......

不带任何参数的set命令将显示当前环境的所有的变量,包括环境变量和一些非环境变量。

unset命令用来清除变量的值,不管这个变量是环境变量还是本地变量。

echo

grep

grep命令来自英文词组global search regular expression and print out the line的缩写,意思是用于全面搜索的正则表达式,并将结果输出。人们通常会将grep命令与正则表达式搭配使用,参数作为搜索过程中的补充或对输出结果的筛选,命令模式十分灵‍活。

语法格式:grep 参数 文件名

原文链接:www.linuxcool.com/grep

curl - 文件传输工具

curl命令来自英文词组CommandLine URL的缩写,其功能是在Shell终端界面中基于URL规则进行文件传输工作。curl是一款综合性的传输工具,可以上传也可以下载,支持HTTP、HTTPS、FTP等30余种常见协‍议。

原文链接:www.linuxcool.com/curl

test - 检测某个条件是否成立

test 是 Shell 内置命令,用来检测某个条件是否成立。test 通常和 if 语句一起使用,并且大部分 if 语句都依赖 test。

test 命令有很多选项,可以进行数值、字符串和文件三个方面的检测。

Shell test 命令的用法为:

test expression

当 test 判断 expression 成立时,退出状态为 0,否则为非 0 值。

test 命令也可以简写为[],它的用法为:

[ expression ]

注意[]和expression之间的空格,这两个空格是必须的,否则会导致语法错误。[]的写法更加简洁,比 test 使用频率高。

  • 数值测试
num1=100
num2=100
# -eq 等于为真
# -nq 不等于为真
# -gt 大于为真
# -ge 大于等于为真
# -lt 小于为真
# -le 小于等于为真
if test $[num1] -eq $[num2] 
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi
  • 字符串测试
num1="ru1noob"
num2="runoob"
# = 等于为真
# != 不等于为真
# -z 字符串长度为零为真
# -n 字符串长度不为零为真
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi
  • 文件测试
cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi