shell的基础学习二

一、Shell 数组

数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由 0 开始。
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 value2 ... valuen)
  • 实例

创建一个简单的数组 my_array

my_array=(A B "C" D)

也可以使用数字下标来定义数组:

array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
  • 读取数组

读取数组元素值的一般格式是:

${
    
    array_name[index]}

以下实例通过数字索引读取数组元素:

my_array=(A B "C" D)

echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"

在这里插入图片描述

  • 关联数组

Bash 支持关联数组,可以使用任意的字符串、或者整数作为下标来访问数组元素。
关联数组使用 declare 命令来声明,语法格式如下:

declare -A array_name

-A 选项就是用于声明一个关联数组。
关联数组的键是唯一的。
以下实例我们创建一个关联数组 site,并创建不同的键值:

declare -A site
site["google"]="www.google.com"
site["runoob"]="www.runoob.com"
site["taobao"]="www.taobao.com"

也可以在定义的同时赋值:

访问关联数组元素可以使用指定的键,格式如下:

array_name["index"]

在这里插入图片描述

  • 获取数组中的所有元素

使用 @ 或 * 可以获取数组中的所有元素,例如:

在这里插入图片描述

  • 获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

在这里插入图片描述

二、Shell 基本运算符

两个数相加(注意使用的是反引号 ` 而不是单引号 '):
expr 是一款表达式计算工具,使用它能完成表达式的求值操作

#!/bin/bash

val=`expr 2 + 2`
echo "两数之和为 : $val"

结果:4

两点注意:

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2

  • 算术运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

在这里插入图片描述

  • 实例

算术运算符实例如下:

在这里插入图片描述

注意:

    乘号(*)前边必须加反斜杠(\)才能实现乘法运算;

在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\" 。
  • 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

在这里插入图片描述

  • 实例

if…then…fi 是条件语句
关系运算符实例如下:
在这里插入图片描述在这里插入图片描述

  • 布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

在这里插入图片描述

  • 实例

布尔运算符实例如下:

在这里插入图片描述在这里插入图片描述

  • 逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
4

  • 字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  • 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

属性检测描述如下:

在这里插入图片描述

其他检查符:

-S: 判断某文件是否 socket。
-L: 检测文件是否存在并且是一个符号链接。 

实例

变量 file 表示文件 /var/www/runoob/test.sh,它的大小为 100 字节,具有 rwx 权限。下面的代码,将检测该文件的各种属性:

file="/var/www/runoob/test.sh"
if [ -r $file ]
then
   echo "文件可读"
else
   echo "文件不可读"
fi
if [ -w $file ]
then
   echo "文件可写"
else
   echo "文件不可写"
fi
if [ -x $file ]
then
   echo "文件可执行"
else
   echo "文件不可执行"
fi
if [ -f $file ]
then
   echo "文件为普通文件"
else
   echo "文件为特殊文件"
fi
if [ -d $file ]
then
   echo "文件是个目录"
else
   echo "文件不是个目录"
fi
if [ -s $file ]
then
   echo "文件不为空"
else
   echo "文件为空"
fi
if [ -e $file ]
then
   echo "文件存在"
else
   echo "文件不存在"
fi

在这里插入图片描述

三、Shell echo命令

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。命令格式:

echo string

您可以使用echo实现更复杂的输出格式控制。

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

四、Shell printf 命令

printf 命令模仿 C 程序库(library)里的 printf() 程序。

printf 由 POSIX 标准所定义,因此使用 printf 的脚本比使用 echo 移植性好。

printf 使用引用文本或空格分隔的参数,外面可以在 printf 中使用格式化字符串,还可以制定字符串的宽度、左右对齐方式等。默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。

printf 命令的语法:

printf  format-string  [arguments...]

参数说明:

format-string: 为格式控制字符串
arguments: 为参数列表。
$ echo "Hello, Shell"
Hello, Shell
$ printf "Hello, Shell\n"
Hello, Shell
$

接下来,我来用一个脚本来体现 printf 的强大功能:

printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg  
printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234
printf "%-10s %-8s %-4.2f\n" 杨过 男 48.6543
printf "%-10s %-8s %-4.2f\n" 郭芙 女 47.9876

在这里插入图片描述

  • %s %c %d %f 都是格式替代符,%s 输出一个字符串,%d 整型输出,%c 输出一个字符,%f 输出实数,以小数形式输出。
  • %-10s 指一个宽度为 10 个字符(- 表示左对齐,没有则表示右对齐),任何字符都会被显示在 10
    个字符宽的字符内,如果不足则自动以空格填充,超过也会将内容全部显示出来。
  • %-4.2f 指格式化为小数,其中 .2 指保留2位小数。
# 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"

在这里插入图片描述

  • printf 的转义序列
    在这里插入图片描述
实例
$ printf "a string, no processing:<%s>\n" "A\nB"
a string, no processing:<A\nB>

$ printf "a string, no processing:<%b>\n" "A\nB"
a string, no processing:<A
B>

$ printf "www.runoob.com \a"
www.runoob.com $                  #不换行

五、Shell test 命令

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

数值测试

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  • 字符串测试

在这里插入图片描述
文件测试

在这里插入图片描述在这里插入图片描述
学习来自“https://www.runoob.com/linux/linux-shell-test.html”

总结

想着去寻求一个平衡点,能否探索到人生的乐趣。最后得知精神之自由,胜过所有!体魄的娱乐只是一种低级的消遣,那就在接下来的时间让自己的精神达到最高的自由,偶尔体魄之娱乐。保持与众不同,做少数人做的事,拒绝成为一个大众人!

猜你喜欢

转载自blog.csdn.net/weixin_51884452/article/details/130466565
今日推荐