4篇文章入门shell脚本(4)

函数

function  xxxxx()
{
    xxxxx
    return int
}

  • 1、可以   function xxxxx() ,也可以直接  xxxxx() 
  • 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)
fun()
{
     echo 'expr 1 + 1'
}
fun            #输出结果:2
echo "$?"      #输出结果:0   #如果函数没有return, $?  则返回最后一条执行指令的结果
                             # $? =0 表示函数中最后一条指令正确
    
fun()
{
        echo 'input one number' 
        read aaa                #读取输入字符
        read bbb                #读取输入字符
        echo $(($aaa+$bbb))     #输出相加结果
        return $(($aaa+$bbb))    
}  
fun                             #运行函数,不加括号
echo "return : $?"              #函数返回值在调用该函数后通过 $? 读取
                                #须立即读取,不读取,会丢失
                                

#运行结果:  input one number
            5                   #手动输入
            6                   #手动输入
            11
            return :11

函数参数

调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数,当n>=10时,需要使用${n}来获取参数。

fun(){
    echo "第二个参数为 $2"
    echo "第十个参数为 $10"
    echo "第十个参数为 ${10}"
    echo "参数总数有 $# 个"
    echo "所有参数 $*"
}
fun 1 2 3 4 5 6 7 8 9 34 73

结果:
第二个参数为 2
第十个参数为 10
第十个参数为 34
参数总数有 11 个
所有参数 1 2 3 4 5 6 7 8 9 34 73
参数处理说明
$#传递到脚本或函数的参数个数
$*以一个单字符串显示所有向脚本传递的参数
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@与$*相同,但是使用时加引号,并在引号中返回每个参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

输入/输出重定向

命令说明
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 之间的内容作为输入。

需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

echo 'aaabbb' > a.sh  #将 aaabbb 写入a.sh,如果没有a.sh,则创建,如果有,则替换掉
date > a.sh    #将日期写入a.sh,并替换掉旧的a.sh
cat a.sh       #结果:Thu 06 Jul 2023 02:43:44 AM UTC

echo 'aaabbb' > b.sh
date >> b.sh   #将日期写入b.sh,如果没有b.sh,则创建,如果有,则在最后一行添加日期
cat b.sh       #结果:aaabbb
                      Thu 06 Jul 2023 02:43:44 AM UTC

wc -l   b.sh   #结果:2 b.sh    #从整个文件层面,查看b.sh 有几行代码
wc -l < b.sh   #结果:2         #从标准输入读取b.sh有几行代码

make 2>err.txt       #将编译错误的写入err.txt
make >err.txt 2>&1   #将 stdout 和 stderr 合并后重定向到 err.txt

/dev/null 文件(禁止输入/输出)

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

make> /dev/null  #编译不会输出中间文件
                 #/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃; /dev/null 文件非常有                            
                 #用,将命令的输出重定向到它,会起到"禁止输出"的效果。
make> /dev/null 2>&1   #屏蔽 stdout 和 stderr

文件包含

. filename   # 注意点号(.)和文件名中间有一空格
或
source filename
#使用 . 号来引用test1.sh 文件#注意点号(.)和文件名中间有一空格
. ./test1.sh

# 或者使用以下包含文件代码
source ./test1.sh   

常用接口

echo命令

echo "\"It is a test\""       #结果:"It is a test"
echo "It is a test" > myfile  #显示结果定向至文件
echo `date`    #Thu Jul 24 10:08:46 CST 2014  显示命令执行结果  `是反引号

printf 命令

和echo区别:echo 自动添加换行符,printf 手动添加 \n

序列说明
\a警告字符,通常为ASCII的BEL字符
\b后退
\c抑制(不显示)输出结果中任何结尾的换行字符(只在%b格式指示符控制下的参数字符串中有效),而且,任何留在参数里的字符、任何接下来的参数以及任何留在格式字符串中的字符,都被忽略
\f换页(formfeed)
\n换行
\r回车(Carriage return)
\t水平制表符
\v垂直制表符
\\一个字面上的反斜杠字符
\ddd表示1到3位数八进制值的字符。仅在格式字符串中有效
\0ddd表示1到3位的八进制值字符
printf "%s\n" "abc"  
printf "%s\n" abc def  #格式只指定了一个参数,但多出的参数仍然会按照该格式输出,format-string 被重用
printf "%s %s %s\n" a b c d e f g h i j  
#结果:a b c
      d e f
      g h i
      j  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值