Shell常用招式大全之入门篇

这篇教程是Shell入门篇,涵盖HelloWorld、判断、循环、变量、重定向、管道、通配符等内容。讲解了echo、if、test、for、while、until、整数、字符串、数组、命令执行结果存入变量、重定向标准输入输出、管道与while、read、xargs的组合使用,以及各种通配符的用法。适合Shell初学者快速入门。
摘要由CSDN通过智能技术生成

本教程分为入门篇,命令篇和实战篇,结合平时工作中使用Shell的经验编写。以实例为主,侧重于应用,总结了一些实用的技巧。

以下为本教程的《入门篇》,适于初学者快速入门以及老手查缺补漏。

第一招 HelloWorld

第一式:echo

echo "Hello World"
echo -n "Hello World"    # 不带换行
echo -e '\e[0;33;1mHello\e[0m World'   # 带颜色的玩法
echo -e '\e[0;33;4mHello\e[0m World'   # 带颜色+下划线
echo -e '\e[0;33;5mHello\e[0m World'   # 带颜色+闪烁

格式为 \e[背景色;前景色;高亮格式m,请阅读详细文档后使用正确的姿势进行装逼。

第二招 判断

第一式:if

if true
then
    echo "Hello World"
else
    echo "Bug"
fi

if false
then
    echo "Hello World"
elif true
then
    echo "Bug"
else
    echo "Bee"
fi

判断原理

ifelif会执行它后面跟着的命令,然后看返回值是否为0,如果为0则执行then下面的语句块,否则执行else下面的语句块。

[casheywen@ubuntu:~]$ true
[casheywen@ubuntu:~]$ echo $?
0
[casheywen@ubuntu:~]$ false
[casheywen@ubuntu:~]$ echo $?
1

注:

  1. truefalse事实上也为一个命令,true的返回码必为0false的返回码必为1
  2. $?shell内置变量,用于存放上一个命令的返回码

第二式:test、[ ] 和 [[ ]]

test[ ][[ ]]实际上都是shell中的命令,执行之后会返回10,而这几个命令与if相结合可以达到我们所需要的许多判断功能,例如测试字符串是否为空的三种写法:

s=""
if [ -z ${s} ]
then
    echo "empty"
fi

if [[ -z ${s} ]]
then
    echo "empty"
fi

if test -z ${s}
then
    echo "empty"
fi

事实上,if后的[ ][[ ]]test命令都是可以单独执行的,而根据if判断原理,后续执行哪个分支也是由[ ][[ ]]test的返回值来决定的,以下是单独执行它们的效果:

[casheywen@ubuntu:~]$ s=""
[casheywen@ubuntu:~]$ [ -z "${s}" ]
[casheywen@ubuntu:~]$ echo $?
0
[casheywen@ubuntu:~]$ s="abc"
[casheywen@ubuntu:~]$ test -z "${s}"
[casheywen@ubuntu:~]$ echo $?
1
[casheywen@ubuntu:~]$ s="123"
[casheywen@ubuntu:~]$ [[ 100 -lt ${
   s} ]]
[casheywen@ubuntu:~]$ echo $?
0

在性能方面[ ]test性能基本相同,[[ ]]性能是最高的,为前两者的5倍左右(以-d运算符测试),所以建议尽量使用[[ ]]提高脚本性能。

文件测试

运算符 描述 示例
-e filename 如果 filename 存在,则为真 [ -e /var/log/syslog ]
-d filename 如果 filename 为目录,则为真 [ -d /tmp/mydir ]
-f filename 如果 filename 为常规文件,则为真 [ -f /usr/bin/grep ]
-L filename 如果 filename 为符号链接,则为真 [ -L /usr/bin/grep ]
-r filename 如果 filename 可读,则为真 [ -r /var/log/syslog ]
-w filename 如果 filename 可写,则为真 [ -w /var/mytmp.txt ]
-x filename 如果 filename 可执行,则为真 [ -L /usr/bin/grep ]
filename1 -nt filename2 如果 filename1 比 filename2 新,则为真 [ /tmp/install/etc/services -nt /etc/services ]
filename1 -ot filename2 如果 filename1 比 filename2 旧,则为真 [ /boot/bzImage -ot arch/i386/boot/bzImage ]

字符串比较

运算符 描述 示例
-z string 如果 string 长度为零,则为真 [ -z "${myvar}" ]
-n string 如果 string 长度非零,则为真 [ -n "${myvar}" ]
string1 = string2 如果 string1 与 string2 相同,则为真 [ "${myvar}" = "abc" ]
string1 != string2 如果 string1 与 string2 不同,则为真 [ "${myvar}" != "abc" ]
string1 < string 如果 string1 小于 string2,则为真 [ "${myvar}" \< "abc" ]
[[ "${myvar}" < "abc" ]]
string1 > string 如果 string1 大于 string2,则为真 [ "${myvar}" \> "abc" ]
[[ "${myvar}" > "abc" ]]

注意:

  1. 在字符串两边加上”“防止出错
  2. <>是字符串比较,不要错用成整数比较
  3. 如果是在[ ]中使用<>,需要将它们写成\<\>

整数比较

运算符 描述 示例
num1 -eq num2 等于 [ 3 -eq $mynum ]
num1 -ne num2 不等于 [ 3 -ne $mynum ]
num1 -lt num2 小于 [ 3 -lt $mynum ]
num1 -le num2 小于或等于 [ 3 -le $mynum ]
num1 -ge num2 大于或等于 [ 3 -ge $mynum ]

第三式:&&、||

&&可以用来对两个判断
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值