版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_27339239/article/details/82624533
内容一:文件包含
在shell脚本中导入其他shell脚本
语法1: ./filename 这里./filename相当于执行了filename脚本
文件A->fileA.sh
#!/bin/bash
echo "我是文件A"
文件B->fileB.sh
#!/bin/bash
./fileA.sh #导入文件A
echo "我是文件B"
语法2:
文件A->fileA.sh 与语法1一致
文件B->fileB.sh修改如下
#!/bin/bash
source fileA.sh #或者这样的方式source ./fileA.sh
echo "I am File-B"
内容二:cat命令
cat命令:
- 作用一:查看文件内容
- 作用二:连接文件
- 作用三:创建文件(一个或者多个)
- 作用四:重定向输出到终端
- 作用五:重定向输出到文件
语法:cat [选项][文件] -> cat [option][file]
e.g NO.1
在Mac终端输入
cat fileA.sh #输出文件内容
cat fileB.sh #输出文件内容
e.g NO.2 -n
cat -n fileA.sh #输出文件和行号
cat -n fileB.sh #输出文件和行号
e.g NO.3 -b
cat -b fileA.sh #输出文件和行号,不输出空白行
cat -b fileB.sh #输出文件和行号,不输出空白行
e.g NO.4 -e
cat -e fileA.sh #输出文件,在每一行的后面加美元符$,需要将多行内容转换成一行的时候使用
e.g NO5
#控制台输入cat,然后enter进入输入模式,然后在控制输入任何字符,控制台会同时打印
#类似复读机一样(下述成为复读模式,方便理解)
cat #接收标准的输入,并且输出标准
按control + c退出,复读模式
内容三:获取输入 read命令
写法一:
read用于接收键盘输入或者其他方式的输入
#!/bin/bash
echo "please your name"
read name
echo "you are ${name}"
写法二: -p 提示语
#!/bin/bash
read -p "please your name" name
echo "you are ${name}"
#-p 后面跟字符串表示 提示语句,类似于占位符placeholder
写法三: 超时禁止输入 -t
#!/bin/bash
if read -t 5 -p "please input your name" name
then
echo "you are ${name}"
else
echo "time out"
fi
#-t 可以理解延迟输入,5为5秒,意思接受5秒内的输入内容,超过5秒执行else内容
写法四: -s 不显示出入内容
#!/bin/bash
read -s -p "please input your password" pwd
echo -e "\nyour password is ${pwd}"
#-s 是密文输入,用于密码一类的文本输入
#${pwd}获取当前路径
写法五:从文件中读取内容
#!/bin/bash
cat -n fileA.sh | while read line
do
echo "${line}"
done
# | shell脚本中的管道语法,前者的结果作为后者的输入
# cat -n fileA.sh 从fileA.sh中读出到文件内容作为输入被read来接收
# while read line 循环获取read接收到的输入,每次循环得到内容用line来接收
内容四:printf输出
1.printf和echo的区别
- printf 不能自动换行,echo 自动换行
- printf 一般用于格式打印,echo 用于标准的输出
2.printf的语法结构
- printf format-string 参数列表
3.案例
1)输出 %-10s 宽度为10的字符,-表示左对齐
#!/bin/bash
printf "%-10s %-8s %-4s\n" 姓名 性别 体重kg
printf "%-10s %-8s %-4.2f\n" Tom 男 100
printf "%-10s %-8s %-4.2f\n" Jam 男 70
printf "%-10s %-8s %-4.2f\n" Alice 男 75
printf "%-10s %-8s %-4.2f\n" Alun 男 65
2)输出printf format-string
#!/bin/bash
#用printf打印字符串
printf "%d %s\n" 1 "Avalanching"
printf '%d %s\n' 1 'Avalanching'
printf "%d %s\n" 1 Avalanching
printf %d 1
printf %s Avalanching
内容五:shell中的函数
基本语法
#!/bin/bash
function function-name () {
code
}
function-name param1 param2 ....
#关键字function 函数名字 () { 代码 }
#调用直接用 函数名字 空格 参数1 空额 参数2 空格 参数3
#可以传多个参数,参数和参数,参数和方法名之间用空格隔开
e.g
#!/bin/bash
function func() {
echo "|--begin"
count=!{#}
if [ count > 0 ]
then
for value in ${@}
do
echo "|--|--${value}"
done
else
echo "|--|--null"
fi
echo "|--over"
return 100
}
echo "before"
func $1 $2
reuslt=$?
echo "come back value:${reuslt}"
echo "over"
终端调用:
./fileA.sh tom ava
输出结果:
before
|--begin
|--|--tom
|--|--ava
|--over
come back value:100
over
#$?为func的返回值,shell脚本中,将函数内部的返回值传给了$?,而无法直接使用result=func $1 $2来获取
#$@获取到一个参数列表
总结:在shell函数return的值是赋值给$?的,而变量接收的值是函数中的echo的输出值。
内容六:输入输出重定向
1.输入重定向
语法:
终端输入:wc 文件名
wc fileA.sh
输出:14 52 283 fileA.sh
- 参数1->14:文本的行数
- 参数2->52:文本的单词数(空格分开,或换行作为一个单词)
- 参数3->283:字节数(B)
1.1.1"<"输入重定向
1.1.2 "<<"创建文件
2.输出重定向
2.1.1 ">"输出的重定向
将方向指向一个文件,将文件中的内容删除,写入新的内容
e.g
在fileB.sh输入
#!/bin/bash
echo "this is fileB"
echo "I have a Dream" > fileA.sh
运行结果:fileA.sh文件中原文本被替换成 I have a Dream
2.1.2 ">>"追加
将方向指向一个文件,将文件中的原内容后面写入新的内容
在fileB.sh输入
#!/bin/bash
echo "this is fileB"
echo "I have a Dream,too" >> fileA.sh
运行结果:fileA.sh文件中原文本后追加 I have a Dream,too
应用:文件编辑,日志打印,创建临时文件