Shell-编程基础(二)

Shell-编程基础(二)

By timebusker on May 29, 2018

IFS的默认值为:空白(包括:空格,制表符,换行符).

Shell函数

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。

[ function ] funname [()]{
    action;
    [return int;]
}
  • 可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
  • 参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

程序示例:

#!/bin/bash

demoFun(){
    echo "这是我的第一个 shell 函数!"
}
echo "-----函数开始执行-----"
demoFun
echo "-----函数执行完毕-----"
函数参数

在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数。

#!/bin/bash

funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73

Shell输入/输出重定向

nohup command > myout.file 2>&1 &

# 操作系统常用的三种流操作:
# 0  标准输入
# 1  标准输出流
# 2  标准错误流
# 一般,我们在使用">、>>、< "等未指明时,默认使用0和1

# 上述指令解释:将command添加到后天运行,并把标准错误流输出到标准输出中,
# 避免标准输出和标准错误同时输出到文件myout.file产生文件读写竞争。

image

Shell文件包含

和其他语言一样,Shell 也可以包含外部脚本。这样可以很方便的封装一些公用的代码作为一个独立的文件。 可以使用. filename # 注意点号(.)和文件名中间有一空格source filename来引用文件。

  • test_1.sh
    #! /bin/bash
    hostsa=/etc/hosts
    cat $hostsa
    mine="this is timebusker"
    
  • test_2.sh
    #!/bin/bash
    source /root/test_1.sh
    echo ".............$hostsa"
    echo ".............$mine"
    

注意

  • 单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原封不动的使用,唯一需要注意的点是不允许引用自身;
  • 双引号属于弱引用,它会对一些被引起来的字符进行特殊处理,主要包括以下情况:
    • $加变量名可以取变量的值
    • 反引号和$()引起来的字符会被当做命令执行后替换原来的字符
    • 当需要使用字符$ " \ 时必须进行转义,也就是在前面加 \