Shell脚本编程(二)

脚本传参

使用$0代表脚本的相对路径

#!/bin/bash              
filename=$(basename $0)
echo $filename
echo $0
echo $1
echo $2
echo $3

给脚本赋值:

./14.sh 7 10 9

其中14.sh是脚本的名称,7,10,9分别给变量1,2,3赋值,执行后的输出结果为:

14.sh
./14.sh
7
10
9

使用#表示参数的总数,使用@来遍历所有参数:

#!/bin/bash
filename=$(basename $0)
echo $filename
echo $0
echo $1
echo $2
echo $3
echo "参数的总数:$#"
for param in "$@";
do
  echo "param:$param"
done

给脚本赋值:

./14.sh 7 10 9

执行后的输出结果为:

14.sh
./14.sh
7
10
9
参数的总数:3
param:7
param:10
param:9

输入输出重定向

标准输入输出:

0    STDIN      标准输入
1    STDOUT     标准输出
2    STDERR     标准错误

1.如下,默认是输出到控制台:

#!/bin/bash                
echo "yy"
echo "zz"

要将上述输出到test文件中,可以在控制台输入:

./15.sh 1>test

这样就可以将输出重定向到test文件中,我们可以验证一下,控制台输入:

cat test

可以看见test中:

yy
zz

这表示已经将输出重定向到test文件中了,但是这样并不够,我们想要在shell脚本中,将每个输出都重定向到一个文件中,显然在控制台输入这样的命令是不够的,我们需要统一处理:

#!/bin/bash                                     
exec 1>test2
echo "yy"
echo "zz"

其中exec 1>test2就是做这样的处理的,将脚本中所有的输出重定向到test2文件中,在控制台输入./15.sh,即可实现重定向,我们可以同上验证。
2.将标准错误输出到文件中:

#!/bin/bash                                       
exec 1> test3
exec 2> test4
echo "yy"
echo "zz"
ls -a "./f"

这里没有f文件,所以ls -a "./f"将会报错,这里将报错的内容都重定向到test4文件中。
3.自定义输出:

#!/bin/bash                                
exec 1> test3
exec 2> test4
exec 7> test5
echo "yy" >&7
echo "zz"
ls -a "./f"

这里就将yy自定义输出到test5文件中,注意>&7之间不能有空格,自定义输出一般用的很好,做为了解就行。

函数调用

#!/bin/bash
#第一种方式
function myfun
{
   echo "myfun函数"
}

#第二种方式
myfun()
{                                 
   echo "myfun2函数"
}
myfun

上述存在两种方式,分别是用function标注和用()去表示函数myfun,两种方式都可以,一般我会用第一种方式。这里存在函数覆盖的,第二种方式的写在第一种方式的下面,会覆盖第一种方式。而第一种方式的写法又有多种,如:

function myfun {
   echo "myfun函数"
}

这里myfun{之间存在空格,否则会报错,还可以这样写:

function myfun(){
   echo "myfun函数"
}

函数传参、返回值

#!/bin/bash                                
function myfun
{
   echo $[ $1 + $2 ]
}
value=$(myfun 8 5)
echo "value:$value"

执行结果为:

value:13

跨脚本调用

被调用的函数库脚本18.sh

#!/bin/bash                                     
#函数库
function add()
{
   echo $[ $1 + $2 ]
}

调用18.sh的脚本17.sh

#!/bin/bash                       
#引入 ./18.sh
#source ./18.sh
. ./18.sh

function myfun(){
   echo $value
}

value=20
myfun
echo "add value:$(add 10 20)"

其中.就是source的快捷别名。

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 4,859评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 103,724评论 13 125
  • 内容一:Shell脚本语言-管道? ​分析场景:有的时候我们需要一个命令的输出作为另外一个命令输入? ​​ ​语法...
    Jackey_song阅读 119评论 0 1
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    O感悟人生O阅读 8,567评论 2 29
  • 生活中,我们总是捉襟见肘,恨不得跟上巨人的脚步,来证明自己的夸夸其谈都是有据可询。然而真相往往在浮出水面的那一刻就...
    0城三点半阅读 73评论 0 0