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

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

十一、Shell 函数

花里胡哨的语言我就不说了,来看一个demo函数:

demoFun(){
    echo "測試一下我的函數!"
}
echo "函数开始执行"
demoFun
echo "-函数执行完毕"

如果你学过别的语言,你一定一眼就看懂了。

完整演示如下:

1.png

到这里我再插入一个例子:从键盘读入10个数,显示最大值和最小值

代码为:

printf "请输入十个数字: "  
read   
biggest=$(echo "$REPLY" | tr ' ' '\n' | sort -rn | head -n1)  
smallest=$(echo "$REPLY" |  tr ' ' '\n' | sort -rn | tail -n1)  
echo "最大的数字为:  $biggest"  
echo "最小的数字为:  $smallest"

完整演示如下:

1.png

下面定义一个带有return语句的函数:

代码为:

add(){
    echo "这个函数为求两个函数之和.."
    echo "输入第一个数字: "
    read aNum
    echo "输入第二个数字: "
    read bNum
    echo "两个数字分别为 $aNum 和 $bNum !"
    return $(($aNum+$bNum))
}
add
echo "输入的两个数字之和为 $? !"

完整演示如下:

1.png

十二、Shell 输入/输出重定向

相关参数如下:

command > file  将输出重定向到 file。
command < file  将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file  将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m  将输出文件 m 和 n 合并。
n <& m  将输入文件 m 和 n 合并。
<< tag  将开始标记 tag 和结束标记 tag 之间的内容作为输入。

做一些例子:

1)输出重定向

将输出重定向到wen文件夹

1.png

再比如我把test16.sh这个文件重定向到han这个文件

1.png

这样的重定向有一个缺点就是会覆盖原来的内容,如果你不想覆盖原来的内容,你可以使用:

command >> file 将输出以追加的方式重定向到 file。

完整演示如下:

1.png

如此我们可以看到已经追加进去了。

2)输入重定向

如果要数一下文件夹内有多少行:

 wc -l wen

1.png

如果我们用重定向的方式,将输入重定向到 wen文件:

 wc -l <  wen

演示为:

1.png

3)Here Document

Here Document 是 Shell 中的一种特殊的重定向方式,用来将输入重定向到一个交互式 Shell 脚本或程序。

语法为;

command << delimiter
    document
delimiter

举个例子:

 wc -l << EOF
   欢迎大家
   这里是川川菜鸟
   教程
EOF

演示:

1.png

也可以以脚本方式执行:

cat << EOF
    欢迎大家
   这里是川川菜鸟
   教程
EOF

演示如下:

1.png

4)/dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

1.png

十三、实战练习

1)Linux例题

如果以下操作你看不懂的话,请看我这一篇文章,看完这一篇文章后,你就看得懂了:cat详细教程

输入输出重定向:

①新建文件file1,输入:

Hello,

Linux!

保存并退出。新建文件file2,输入:

World!

保存并退出。

将file1和file2的内容显示在终端上,并重定向到文件file3。

将file1的内容追加到文件file3。


操作步骤:

1.创建一个新的文件夹work

mkdir work

2.切换目录

cd work/

完整演示:

1.png

3.创建并编辑新文件

touch file1

编辑文件

vim file1

查看文件:

cat file

完整演示:

1.png

4.创建另一个文件

同样的道理,完整演示如下:

1.png

5.重定向到file3文件

cat file1 file2 >>file3

完整演示如下:

1.png

6.将file1的内容追加到文件file3

cat file1>>file3

完整演示如下:

1.png

②管道:

统计文件file3中出现“hello”的行数并显示

grep Hello file3 |wc -l

演示如下:

1.png

③管道和输入输出重定向:

进入目录/home/student,用ls –l长格式的方式列出当前目录下的文件和目录,并将其前5条信息保存到文件list中。

创建新文件夹,并编辑list.txt内容如下:

file1
file2
file3
file4
file5
file6
file7

完整演示:

1.png

查看一下:

1.png

查看当前目录下文件和目录

ls -al

演示:

1.png

筛选前5的数据加到file3中:

ls -l |head -n 5 >>list.txt

完整演示如下:

1.png

2)shell练习题

① 在/home目录中创建50个目录,目录名称依次为:a1,……,a50;

创建一个sh文件:

touch 1.sh

内容为:

i=1
while [ $i -le 50 ]
do
mkdir a$i
i=$((i+1))
done

完整演示:

1.png

② 编写一个程序,它的作用是:先查看一下/root/test/logical这个名称是否存在。若不存在,则创建一个文件,使用touch来创建,创建完成后离开;如果存在,判断该名称是否为文件,若为文件,则显示其行数;如果不是文件,则离开;

创建2.sh

touch 2.sh

内容为:

if [ ! -e /home/yifan/maying/shell/case5/logical ]  
then
    touch logical  
elif 
    [ -f /home/yifan/maying/shell/case5/logical ]  
then 
    rm -f /home/yifan/maying/shell/case5/logical && mkdir /home/yifan/maying/shell/case5/logical  
elif 
    [ -d /home/yifan/maying/shell/case5/logical ]  
then 
    rm -r /home/yifan/maying/shell/case5/logical  
fi 

演示如下:

11.png

查看一下:

1.png

③编写一个shell脚本,从键盘读入10个数,显示最大值和最小值

printf "请输入十个数字: "  
read   
biggest=$(echo "$REPLY" | tr ' ' '\n' | sort -rn | head -n1)  
smallest=$(echo "$REPLY" |  tr ' ' '\n' | sort -rn | tail -n1)  
echo "最大的数字为:  $biggest"  
echo "最小的数字为:  $smallest"

完整演示如下:

1.png

④ 编写一个脚本,打印任何数的乘法表。如:输入3,则打印

11=1

21=2 22=4

31=3 32=6 33=9

代码如下:

echo "输入一个数:"
read num
for ((  i=1;i<=$num;i++  ))
do
   for ((  j=1;j<=$num;j++  ))
   do
      [  $j  -le  $i  ]  &&  echo -n "${i}*${j}=$((i*j))      "    #判断j是否小于i,当
j大于i时不输出,输出不换行,末尾加一个制表符
   done
   echo ""           #输出一个换行符                
done

完整演示如下:

1.png

十四、总结

本篇文章写得很详细,不管你是不是零基础,相信你都能看懂,本文主要在一些基础知识讲解,并没有太多的进阶,本人主要是为了完成作业学习这个,这些内容已经足够我完成作业了。

相关文章
|
11天前
|
Shell Linux 程序员
【Linux】Shell 命令以及运行原理
【Linux】Shell 命令以及运行原理
|
18天前
|
NoSQL Linux 网络安全
Linux安装Redis(详细教程)
Linux安装Redis(详细教程)
70 2
|
12天前
|
Shell Linux
【linux课设】自主实现shell命令行解释器
【linux课设】自主实现shell命令行解释器
|
12天前
|
存储 Unix Linux
linux权限管理以及shell
linux权限管理以及shell
|
13天前
|
运维 Linux Shell
day02-Linux运维-系统介绍与环境搭建_硬件 系统核心 解释器shell 外围操作系统
day02-Linux运维-系统介绍与环境搭建_硬件 系统核心 解释器shell 外围操作系统
|
13天前
|
开发框架 .NET Linux
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
|
16天前
|
运维 监控 关系型数据库
【Zabbix 6(1),Linux运维组件化开发教程
【Zabbix 6(1),Linux运维组件化开发教程
|
18天前
|
弹性计算 分布式计算 Hadoop
Linux(阿里云)安装Hadoop(详细教程+避坑)
Linux(阿里云)安装Hadoop(详细教程+避坑)
76 3
|
18天前
|
Shell Linux Perl
Linux|如何允许 awk 使用 Shell 变量
Linux|如何允许 awk 使用 Shell 变量
24 2
|
8月前
|
Unix Shell Linux