Shell学习计划——常用命令

一、echo命令

echo指令可以用于字符串的输出。

echo 命令语法格式

echo string

我们也可以使用 echo 实现更复杂的输出格式控制

范例 1:显示普通字符串

$ echo "It is a good day"

执行结果

$ echo "It is a good day"
It is a good day

这里的双引号完全可以省略,下面的范例与上面范例效果一致:

$ echo It is a good day
It is a good day

 

范例 2:显示转义字符

$ echo "\"It is a dog\""

结果将是:

$ echo "\"It is a dog\""
"It is a dog"

同样,双引号也可以省略

 

范例 3: 显示变量

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量

#!/bin/sh
read name 
echo "$name It is a good day"

将以上代码保存为: demo.sh ,name 接收标准输入的变量

执行脚本输出结果

$ sh demo.sh
good                    #标准输入
good It is a good day   #输出        

 

范例 4: 使用 -e 开启转义,显示换行

$ echo -e "OK! \n" && echo "It it a good day"

输出结果:

OK!

It it a good day

 

范例 5: 使用 \c 显示不换行

$ echo -e "OK! \c" && echo "It is a good day"

输出结果:

OK! It is a good day

 

范例 6: 显示结果定向至文件

$ echo "It is a good day" > myfile
$ cat myfile
It is a good day

 

范例 7: 原样输出字符串,不进行转义或取变量(用单引号)

echo '$name\"'

输出结果:

$name\"

 

范例 8: 使用反引号`` 显示命令执行结果

echo `date`

注意: 这里使用的是反引号`, 而不是单引号'

结果将显示当前日期

2021年 3月02日 星期二 22时38分50秒 CST

 

二、printf命令

printf 命令的语法

printf  format-string  [arguments...]

printf 使用引用文本空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。

默认 printf 不会像 echo 自动添加换行符,但我们可以手动添加 \n

语法方面看起来使用 printf 的脚本比使用 echo 移植性好

参数说明

参数 说明
format-string 格式控制字符串
arguments 参数列表

 

范例 1 : 使用 printf 输出

$ echo "Hello, world"
Hello, world
$ printf "Hello, Shell\n"
Hello, Shell
$

范例 2 : 使用 printf 来格式化输出

#!/bin/bash
# filename: demo.sh
# author:xiaobai
# url:www.baidu.cn

printf "%-10s %-8s %-4s\n"   姓名 性别    体重kg  
printf "%-10s %-8s %-4.2f\n" 张三 男      66.12 
printf "%-10s %-8s %-4.2f\n" 李四 男      58.65 
printf "%-10s %-8s %-4.2f\n" 王五 女      47.98

执行脚本,输出结果如下:

$ sh demo.sh
姓名     性别     体重kg
张三      男      66.12
李四      男      58.65
王五      女      47.98

%s %c %d %f 都是格式替代符

%-10s 指一个宽度为10个字符(-表示左对齐,没有则表示右对齐),任何字符都会被显示在10个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。

%-4.2f 指格式化为小数,其中.2指保留2位小数

范例 3 : 使用 printf 来格式化输出2

#!/bin/bash
# filename: demo.sh
# author:小白
# url:www.baidu.cn

# format-string为双引号
printf "%d %s\n" 1 "abc"

# 单引号与双引号效果一样 
printf '%d %s\n' 1 "abc" 

# 没有引号也可以输出
printf %s abcdef

# 格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf %s abc def

printf "%s\n" abc def

printf "%s %s %s\n" a b c d e f g h i j

# 如果没有 arguments,那么 %s 用NULL代替,%d 用 0 代替
printf "%s and %d \n"

执行脚本,输出结果如下所示:

1 abc
1 abc
abcdefabcdefabc
def
a b c
d e f
g h i
j
 and 0

%d %s %c %f 格式替代符:

  • %d: Decimal 十进制整数 -- 对应位置参数必须是十进制整数,否则报错!
  • %s: String 字符串 -- 对应位置参数必须是字符串或者字符型,否则报错!
  • %c: Char 字符 -- 对应位置参数必须是字符串或者字符型,否则报错!
  • %f: Float 浮点 -- 对应位置参数必须是数字型,否则报错!
  • %b: String 字符串 -- 跟 %s 一样,只不过会处理转义序列

范例 4:

$  printf "%d %s %c\n" 1 "what" "is  your name?"
1 what i

printf 转义序列

序列 描述
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\c 抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f 换页(formfeed)
\n 换行
\r 回车(Carriage return)
\t 水平制表符
\v 垂直制表符
\ 一个字面上的反斜杠字符
\ddd 表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd 表示1到3位的八进制值字符

范例 5 : 使用 printf 输出转义序列字符

%s 会原样输出字符或文本

$ printf "一段文字,处理转义字符:<%s>\n" "A\nB"
一段文字,不处理转义字符:<A\nB>

%b 会处理转义字符

$ printf "一段文字,会处理转义字符:<%b>\n" "A\nB"
一段文字,会处理转义字符:<A
B>

如果直接输出,也会处理转义字符

$ printf "www.xiaobai.cn \a"
www.xiaobai.cn $                  #注意到 不换行有没有

三、test命令

Linux 提供了一个非常有趣而且有用的命令 test, 它能够用来测试某个条件是否成立

Shell 中的 test 命令可以用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试

1. 数值测试

参数 描述
-eq 等于则为真,否则为假
-ne 不等于则为真,否则为假
-gt 大于则为真,否则为假
-ge 大于等于则为真,否则为假
-lt 小于则为真,否则为假
-le 小于等于则为真,否则为假

范例 1: 用 test 命令做数值测试

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo "$[num1],${num2} 两个数相等!"
else
    echo "${num1},${num2} 两个数不相等!"
fi

运行 sh demo.sh 输出结果:

100,100 两个数相等!

代码中的 [] 可以执行基本的算数运算

范例 2: [] 可以执行基本的算数运算

#!/bin/bash

a=7
b=17

result=$[a+b] # 注意等号两边不能有空格
echo "result 为: $result"

结果为:

result 为: 24

 

2、字符串测试

参数 描述
= 等于则为真,否则为假
!= 不相等则为真,否则为假
-z 字符串 字符串的长度为零则为真,否则为假
-n 字符串 字符串的长度不为零则为真,否则为假

范例 3: 用 test 命令做字符串测试

#!/bin/bash
# filename: demo.sh
# author:xiaobai
# url:www.baidu.cn


str1="baidu.cn"
str2="小白"
if test $str1 = $str2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

输出结果:

两个字符串不相等!

 

3、文件测试

参数 描述
-e 文件名 如果文件存在则为真
-r 文件名 如果文件存在且可读则为真
-w 文件名 如果文件存在且可写则为真
-x 文件名 如果文件存在且可执行则为真
-s 文件名 如果文件存在且至少有一个字符则为真
-d 文件名 如果文件存在且为目录则为真
-f 文件名 如果文件存在且为普通文件则为真
-c 文件名 如果文件存在且为字符型特殊文件则为真
-b 文件名 如果文件存在且为块特殊文件则为真

范例 4: 用 test 命令做文件测试

#!/bin/bash
# filename: demo.sh
# author:小白
# url:www.baidu.cn

cd /sbin
if test -e ./ping
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

执行范例输出结果:

文件已存在!

 

4、其它测试

除了上面的三种,Shell 还提供了 与( -a )、或( -o )、非( ! )三个逻辑操作符用于将测试条件连接起来,其优先级为:"!" 最高,"-a" 次之,"-o" 最低

范例 5:与或非测试

#!/bin/bash
# filename: demo.sh
# author:小白
# url:www.baidu.cn

cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '有一个文件存在!'
else
    echo '两个文件都不存在'
fi

执行范例输出结果:

有一个文件存在!

Shell中三个常用命令今天就学习到这里,明天见!

上一篇:python中指定字符串宽度,并指定填充字符串


下一篇:js 保留两位小数 多位小数(javascript)