shell脚本的那点小事儿--shell脚本语言输入输出与文件操作(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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命令:

  1. 作用一:查看文件内容
  2. 作用二:连接文件
  3. 作用三:创建文件(一个或者多个)
  4. 作用四:重定向输出到终端
  5. 作用五:重定向输出到文件

语法: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

应用:文件编辑,日志打印,创建临时文件

注意:以上的缩进是为了方便查看层级关系,如果在运行代码中报错(not found command),请去除缩进,注意if后的空格

猜你喜欢

转载自blog.csdn.net/qq_27339239/article/details/82624533
今日推荐