linux系统是如何操作计算机硬件CPU,内存,磁盘,显示器等?使用linux的内核操作计算机的硬件Shell介绍...
Shell计算命令:expr命令详解介绍expr (evaluate expressions 的缩写),译为“表达...
流程控制:if else语句if语法多行写法语法if 条件 then 命令 fi可以将if语句放入一行语...
Shell函数:系统函数函数介绍Shell编程和其他编程语言一样, 有函数, 函数是由若干条shell命令组成的...
Shell好用的工具: cut使用cut可以切割提取指定列字符字节的数据介绍cut 译为“剪切, 切割”,是一个...
面试题:查空行问题:使用Linux命令查询 file1.txt 中空行所在的行号file1.txt数据准备xn20...
函数介绍
Shell编程和其他编程语言一样, 有函数, 函数是由若干条shell命令组成的语句块,实现Shell脚本代码重用和模块化编程。
函数分类
1.系统函数
2.自定义函数
系统函数介绍
系统自带提供的函数, 可以直接使用。
basename函数用于获取文件名的函数, 根据给出的文件路径截取出文件名
basename [string / pathname] [suffix]
根据根据指定字符串或路径名进行截取文件名, 比如: 根据路径"/one/two/aa.txt", 可以截取出aa.txt suffix:用于截取的时候去掉指定的后缀名。
从指定的文件绝对路径, 去除文件名,返回剩下的前缀目录路径
dirname 文件绝对路径
系统函数 自定义函数
basename 用于从指定路径中获取文件名 dirname 用于从指定的路径中获取目录名, 去掉文件名
介绍
开发人员可以通过自定义开发函数,实现代码重用.
语法
# 函数的定义
[ function ] funname ()
{
命令
[return 返回值]
}
# 调用函数
funname 传递参数1 传递参数2 ...
必须在调用函数地方之前,先声明函数,shell脚本是逐行运行的, 只要先运行了函数,后面才可以时使用函数。
文件脚本代码
#!/bin/bash
demo()
{
echo "执行了函数"
}
# 调用函数
demo
运行效果
fun2.sh文件脚本代码
#!/bin/bash
sum()
{
echo "求两个数的和..."
read -p "输入第一个数字: " n1
read -p "输入第二个数字: " n2
echo "两个数字分别为 $n1 和 $n2 "
return $(($n1+$n2))
}
# 调用函数
sum
echo "两个数字的和为: $? " # 获取函数返回值
运行效果
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 n 的形式来获取参数的值,例如, 1 表示第一个参数,
其他参数介绍
参数处理 | 说明 |
---|---|
$# | 传递到脚本或函数的参数个数 |
$* | 以一个单字符串显示所有向脚本传递的参数 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用时加引号,并在引号中返回每个参数。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |
fun3.sh文件脚本代码
#!/bin/bash
funParam(){
echo "第一个参数为 $1 !"
echo "第二个参数为 $2 !"
echo "第十个参数为 $10 !"
echo "第十个参数为 ${10} !"
echo "第十一个参数为 ${11} !"
echo "参数总数有 $# 个!"
echo "作为一个字符串输出所有参数 $* !"
}
# 调用函数
funParam 1 2 3 4 5 6 7 8 9 10 22
运行效果
函数和shell程序比较相似,区别在于:
Shell程序(内置命令和外部脚本文件), 外部脚本文件是在子Shell中运行, 会开启独立的进程运行
Shell函数在当前Shell的进程中运行
fun4.sh脚本文件代码
#!/bin/bash
demo(){
echo "函数中打印当前进程ID:$$"
}
echo "当前脚本文件(Shell程序)打印当前进程ID:$$"
# 调用函数
demo
运行效果
使用Shell的自定义函数实现代码重用
说出Shell程序命令与函数的区别
Shell程序命令: 运行命令时开启一个子进程运行命令 函数: 在当前Shell环境中运行, 没有开启进程
从键盘读取用户输入的数据,然后再把数据拿到Shell程序中使用;
Shell程序产生的数据,这些数据一般都是呈现到显示器上供用户浏览查看;
每个 Unix/Linux 命令运行时都会打开三个文件, 文件如下
文件名 | 类型 | 文件描述符(file description, fd) | 功能 |
---|---|---|---|
stdin | (standard input)标准输入文件 | 0 | 获取键盘的输入数据 |
stdout | (standard output) 标准输出文件 | 1 | 将正确数据输出到显示器上 |
stderr | (standard error) 标准错误输出文件 | 2 | 将错误信息输出到显示器上 |
每个文件都有一个唯一的 文件描述符fd, 后面会通过唯一 文件描述符fd 操作对应的信息
Shell程序操作输入输出时用到这3个文件
这3个文件用于临时传输数据使用
Linux Shell 重定向分为两种,一种输入重定向,一种是输出重定向.
输出重定向是指命令的结果不再输出到显示器上,而是输出到其它地方,一般是文件中。这样做的最大好处就是把命令的结果保存起来,当我们需要的时候可以随时查询。
命令 | 说明 |
---|---|
命令 > file | 将正确数据重定向输出到 file 文件中, 覆盖方式 |
命令 < file | 将输入重定向从 file 文件中读取数据 |
命令 >> file | 将正确数据重定向输出到 file 文件中, 追加方式 |
命令 < file1 > file2 | 从file文件读取数据, 输出数据到file2文件中 |
命令 fd> file | 根据指定的文件描述符fd 将数据重定向输出到 file 文件中, 覆盖方式 |
命令 fd>> file | 根据指定的文件描述符fd 将数据重定向输出到 file 文件中, 追加方式 |
命令 > file fd1>& fd2 | 将 fd1 和 fd2 文件描述符合并输出到文件。 |
fd1<& fd2 | 将 fd1 和 fd2 文件描述符合并 从文件读取输入. |
<< tag | 读取终端输入数据, 将开始标记 tag 和结束标记 tag 之间的内容作为输入。标记名tag可以任意 |
在输出重定向中,
>
代表的是覆盖输出,>>
代表的是追加输出。 fd是文件描述符: 0 通常是标准输入(STDIN), 1 是标准输出(STDOUT), 2 是标准错误输出(STDERR)。 fd> 或 fd>> 中间不可以有空格
创建文件redirect1.txt
touch redirect1.txt
执行who命令重定向输出到redirect1.txt文件中
echo "itheima" >> redirect1.txt
预览错误消息
ls java
没有java目录所以报错,将错误消息输出到error.log文件中
ls java 2> redirect2.txt
2 是标准错误输出(STDERR), 注意
>
覆盖方式输出2>
注意fd与>符号之间不能有空格
运行效果
将正确信息与错误信息都保存到一个文件中
echo "itcast" > redirect2.txt 2>&1
数字 1 代表正确输出的结果输出到文件中 数字 2 代表错误结果输出到文件中
2>&1
将正确和错误都输出到文件中.2>&
中间不能有空格, 写法有2种 合并第一种写法:2>& 1
合并第二种写法:2>&1
运行效果
Linux wc 命令可以用来对文本进行统计,包括单词个数、行数、字节数
wc [options] [文件名]
options有如下:
选项 | 含义 |
---|---|
-c | character, 统计字节数 |
-w | word, 统计单词数 |
-l | line, 统计行数 |
统计文件redirect2.txt中数据行数
wc -l < redirect2.txt
运行效果
循环读取文件每一行数据
while read str; do echo $str; done < redirect2.txt
运行效果
1.Shell重定向的含义
改变标准数据流动的方向,undefineda.可以将数据输出到文件中, 叫重定向输出 b.可以读取文件中的数据作为输入, 叫重定向输入
2.使用重定向输出数据到文件中保存
命令 > file 命令 >> file 命令 2 >> file 命令 > file 2&>1
3.使用重定向从文件中读取输入数据
命令 < file 命令 < file1 > file2
版权属于:乐心湖's Blog
本文链接:https://cloud.tencent.com/developer/article/1774939
声明:博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!