您当前的位置: 首页 >  linux

川川菜鸟

暂无认证

  • 2浏览

    0关注

    969博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

⭐万字Linux shell详细教程⭐包教包会,学不会找我!

川川菜鸟 发布时间:2021-10-05 02:31:04 ,浏览量:2

文章目录
    • 一、环境准备
    • 二、hello Linux
    • 三、运行shell脚本
    • 四、shell变量
      • 1)普通变量
      • 2)只读变量
      • 3)删除变量
    • 五、Shell 字符串
      • 1)单双引号
      • 2)字符串拼接
      • 3)获取字符串长度
      • 4)字符串提取
    • 六、Shell 数组
      • 1)读取索引数组
      • 2)获取数组中的所有元素
      • 3)获取数组的长度
    • 七、shell运算符
    • 八、Shell echo命令
      • 1)显示普通字符串
      • 2)显示转义字符
      • 3)显示换行
      • 4)显示不换行
      • 5)显示结果重定向至文件
      • 6)显示执行时间
    • 九、Shell test 命令
      • 1)数值测试
      • 2)字符串测试
      • 3)文件测试
    • 十、shell 控制流
      • 1)if判断流
      • 2)for 循环
      • 3)while循环
      • 4)until 循环
      • 5)case ... esac
      • 6)跳出循环
    • 十一、Shell 函数
    • 十二、Shell 输入/输出重定向
      • 1)输出重定向
      • 2)输入重定向
      • 3)Here Document
      • 4)/dev/null 文件
    • 十三、实战练习
      • 1)Linux例题
      • 2)shell练习题
    • 十四、总结

一、环境准备

我们在这里就在本地测试学习,因此我在这里先不建议大家这么着急去买服务器来学,这样比较费钱,等我们学好这些基础之后,再去上手服务器,那将是手到擒来。 本地学习工具:虚拟机 如果你没有该工具,请按照这个操作安装:虚拟机安装配置教程 当然,如果你有钱,阿里云,腾讯云自己租一个也可以。

二、hello Linux

创建shell脚本,命名test,格式统一为.sh

touch test.sh

编辑脚本:

vim test.sh

如果你不了解vim用法,或者你的虚拟机没有安装vim,看这一篇文章前面部分:cat详细教程顺便你也可以学一下cat命令。这里大概演示一下: 先输入如下命令回车

vim test.sh

按一下字母i键,即可编辑,我就输入hello Linux,你也可以写别的内容,不一定为英文 在这里插入图片描述

编辑好内容后,按一下ESC键,再输入:wq! (表示强制保存退出的意思),回车即可。 在这里插入图片描述

如上则是保存成功。

三、运行shell脚本

首先赋予权限:

chmod 777 test.sh

执行脚本:

./test.sh

演示: 在这里插入图片描述

四、shell变量 1)普通变量

变量就很简单,比如我我要给变量a赋值为“川川帅哥“,则是:

a="川川帅哥"

使用打印变量呢?

echo $a

你可以在这里把echo理解为python的print,c语言的printf之类。

现在我们还是新建一个sh来进行测试

 touch test1.sh

编辑文件:

vim test1.sh

编辑内容如下: 在这里插入图片描述 操作界面如下: 在这里插入图片描述 你可以看到,我开始忘记给文件权限,所以执行的时候显示权限不够。所以不要忘记赋予权限。

2)只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。举个例子。 创建新的文件并编辑: 在这里插入图片描述

编辑内容如下: 在这里插入图片描述 执行则会报错: 在这里插入图片描述 实际上这样的变量,我们一般也不怎么用,个人认为了解一下就是。

3)删除变量

使用函数unset,跟上面操作一样,就不演示了,也是作为了解就行。

c="川川菜鸟"
unset c
echo $c

以上实例执行将没有任何输出。

五、Shell 字符串 1)单双引号

字符串可以用单引号,也可以用双引号,也可以不用引号。 创建内容为:

a='川川菜鳥'
b="川川帥哥"
echo $a
echo $b

演示: 在这里插入图片描述 完整演示: 在这里插入图片描述 单引号特点:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号特点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
2)字符串拼接
a="chuan"
b="chuan"
c=" $a$b"
echo $c

如下: 在这里插入图片描述

完整演示如下: 在这里插入图片描述

3)获取字符串长度

在上面的基础之上加上echo ${#c}即可:

a="chuan"
b="chuan"
c=" $a$b"
echo $c
echo ${#c}

完整演示: 在这里插入图片描述

4)字符串提取

我们在前面的基础之上加上一点即可,我们主要是用切片的方法来来获取,什么是切片?如果你跟我一起学过python那你不会不知道,就不讲解了。 编辑保存内容如下

a="chuan"
b="chuan"
c=" $a$b"
echo $c
echo ${#c}
echo ${a:1:3}

即: 在这里插入图片描述

完整演示: 在这里插入图片描述

六、Shell 数组 1)读取索引数组

Shell 数组用括号来表示,元素用空格符号分割开。 sh文件内容为:

a=(A B "C" D)
echo $a

在这里插入图片描述 完整演示为: 在这里插入图片描述 但是你是否在疑惑只输出的第一个,shell里我们不能像别的语言一样,直接输出全部,因此我们要修改一下。 改为这样:

a=(A B "C" D)
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}

在这里插入图片描述 保存再次运行: 在这里插入图片描述

2)获取数组中的所有元素

如果想一次性全部输出,并不想通过索引来输出怎么办?使用@ 或 * 可以获取数组中的所有元素,在上面的基础上我再编辑加两行:

a=(A B "C" D)
echo ${a[0]}
echo ${a[1]}
echo ${a[2]}
echo ${a[3]}
echo "數組元素依次如下:${a[@]}"
echo "數組元素依次如下:${a[*]}"

完整演示: 在这里插入图片描述

3)获取数组的长度

在前面的基础之上加上:

echo "數組元素個數爲:${#a[@]}"
echo "數組元素個數爲:${#a[*]}"

在这里插入图片描述 演示如下: 在这里插入图片描述

七、shell运算符

算术运算符 在这里插入图片描述 演示其中一部分,其它则类似:

a=10
b=20

val=`expr $a + $b`
echo "a + b : $val"

val=`expr $a - $b`
echo "a - b : $val"

val=`expr $a \* $b`
echo "a * b : $val"

val=`expr $b / $a`
echo "b / a : $val"

val=`expr $b % $a`
echo "b % a : $val"

if [ $a == $b ]
then
   echo "a 等于 b"
fi
if [ $a != $b ]
then
   echo "a 不等于 b"
fi

在这里插入图片描述 完整演示如下: 在这里插入图片描述 注意事项:

  • 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
  • 完整的表达式要被 两个反引号 包含,注意这个字符不是常用的单引号,在 Esc 键下边。
  • 乘号(*)前边必须加反斜杠()才能实现乘法运算;
  • if…then…fi 是条件语句,后续将会补充讲解。

其它运算符就不讲了,主要掌握下算数运算符。

八、Shell echo命令

你可以直接在终端输入这样的单行命令来测试学习,不用一直创建新的文件。

1)显示普通字符串
echo "hello world"

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

echo hello world

完整演示如下: 在这里插入图片描述

2)显示转义字符
echo "\"hello world\""

演示如下: 在这里插入图片描述

3)显示换行

使用\n换行:

echo -e "hello\n"

演示如下: 在这里插入图片描述

4)显示不换行
echo -e "chuan! \c" # -e 开启转义 \c 不换行

演示: 在这里插入图片描述

5)显示结果重定向至文件

定向至test7.sh文件:

 echo "hello world" >test7.sh

演示: 在这里插入图片描述

6)显示执行时间
echo `date`

演示: 在这里插入图片描述 这里又到了最后了,补充一下printf跟echo命令是一样的作用,因此我就不演示了,统一用echo来输出。

九、Shell test 命令 1)数值测试

参数和说明如下:

-eq	等于则为真
-ne	不等于则为真
-gt	大于则为真
-ge	大于等于则为真
-lt	小于则为真
-le	小于等于则为真

演示一个参数如下:

num1=200
num2=200
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi  

即: 在这里插入图片描述 完整演示如下: 在这里插入图片描述 到这里我先把前面创建的文件删了:

rm -rf test1.sh test2.sh test3.sh test4.sh test5.sh test6.sh test7.sh test8.sh 

演示: 在这里插入图片描述

代码中的 [] 执行基本的算数运算,例如:

a=10
b=10

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

在这里插入图片描述 完整演示如下(我新建了一个文件夹,免得打乱了): 在这里插入图片描述 我仅仅演示了加法,你也可以去尝试一些别的计算。

2)字符串测试

参数如下:

=	等于则为真
!=	不相等则为真
-z 字符串	字符串的长度为零则为真
-n 字符串	字符串的长度不为零则为真

演示一个如下:

num1="chuan"
num2="chuan"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

即: 在这里插入图片描述 完整演示如下: 在这里插入图片描述

3)文件测试

参数:

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

举一个例子:

if test -e ./test1.sh
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

完整演示如下: 在这里插入图片描述 其它参数可以自行测试。

十、shell 控制流 1)if判断流

if else fi 语法格式如下:

if condition
then
    command1 
    command2
    ...
    commandN 
fi

举个例子:

-gt	大于则为真

测试代码如下:

a=5
b=6
if test [$a -gt]
then
        echo '大於'
else    
        echo '小於'
fi

完整演示如下: 在这里插入图片描述 再来进阶测试代码如下:

a=5
b=6
if test [$a==$b]
then
        echo '等於'
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

完整演示如下: 在这里插入图片描述

2)for 循环

语法:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

写成一行则是:

for var in item1 item2 ... itemN; do command1; command2… done;

举例子如下:顺序输出当前列表中的数字

for a in 1 2 3 4 5
do
    echo "值依次爲: $a"
done

完整演示如下: 在这里插入图片描述 再例如:顺序输出字符串中的字符

for str in hello chuan chuan
do
    echo $str
done

完整演示如下: 在这里插入图片描述 我们再来个进阶:打印任意数的乘法表

echo "输入一个数:"
read num
for ((  i=1;i file	将文件描述符为 n 的文件重定向到 file。
n >> file	将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m	将输出文件 m 和 n 合并。
n             
关注
打赏
1665165634
查看更多评论
0.0802s