• shell高级特性-4


    1、shell模块

    shell脚本中可以加载配置文件或调用已经完成函数或脚本。

    a、加载配置文件

    新建配置文件config,插入以下代码:

    1 reboot_mode=True

    在同一路径下,新建文件module.sh,插入以下代码:

    1 #!/bin/bash
    2 #可以简写为:. config
    3 source config
    4 echo "reboot mode is: ${reboot_mode}"

    输出:

    1 reboot mode is: True

    b、使用其它文件中定义的函数

    新建文件add.sh,插入以下代码:

    1 #!/bin/bash
    2 function add(){
    3     x=$1
    4     y=$2
    5     echo "`expr ${x} + ${y}`"
    6 }

    在同一路径下module.sh中,插入以下代码:

    1 #!/bin/bash
    2 #可以简写为:. config
    3 source config
    4 echo "reboot mode is: ${reboot_mode}"
    5 
    6 #加载add模块
    7 . add.sh
    8 echo " 1 + 2 result is: $(add 1 2)"

    输出:

    1 reboot mode is: True
    2  1 + 2 result is: 3

    2、局部变量和全局变量

    1 #局部变量只能在函数中定义,不加local即为全局变量,语法如下:
    2 local var_name=val

    示例:

     1 function say_hi(){
     2     local str1="hi"
     3         name=$1
     4     echo "${str1},${name},Nice to meet you!"
     5 }
     6 say_hi "Vicent"
     7 
     8 #在函数外打印name和str1
     9 #str1为局部变量,无法在函数外引用
    10 echo "val of str1 is: ${str1}"
    11 #name为全部变量,输出为Vicent
    12 echo "val of name is: ${name}"

    输出:

    1 hi,Vicent,Nice to meet you!
    2 val of str1 is: 
    3 val of name is: Vicent

    3、重定向

     重定向分为输入重定向和输出重定向向两种。重定向就是改变标准输入和输出的方向。标准的输入方向为从键盘到程序,标准的输出方向是从程序到屏幕。

    为了区别文件,给每个文件分配一个整数,这个就是文件描述符。

    1. 标准输入的文件名为stdin,文件描述符为0
    2. 标准输出的文件名为stdout,文件描述符为1
    3. 标准错误输出文件名为stderr,文件描述符为2

    输出重定向是值输出不再是屏幕,一般是文件,这样可以方便保存与查看。

    示例1:

    1 #命令>文件,以覆盖的方式把命令的正确结果输出到文件中
    2 ls -all > a.txt
    3 cat a.txt

    输出1:

    1 总用量 20
    2 drwxr-xr-x  2 stephen stephen 4096 4月   4 18:54 .
    3 drwxr-xr-x 61 stephen stephen 4096 4月   4 18:15 ..
    4 -rw-rw-r--  1 stephen stephen   69 4月   4 18:25 add.sh
    5 -rw-r--r--  1 stephen stephen    0 4月   4 18:54 a.txt
    6 -rw-r--r--  1 stephen stephen   17 4月   4 18:15 config
    7 -rw-rw-r--  1 stephen stephen  557 4月   4 18:54 module.sh

    示例2:

    1 #ll命令不存在,所以会报错。以覆盖的方式把标准输出和标准错误输出重定向到文件b.txt中
    2 date;ll  > b.txt 2>&1 
    3 cat b.txt

    输出2:

    1 2019年 04月 04日 星期四 18:59:52 CST
    2 module.sh: 行 24: ll: 未找到命令

    示例3:

    1 #ll命令不存在,所以会报错
    2 #ll命令不存在,所以会报错。以追加的方式把标准输出和标准错误输出重定向到文件b.txt中
    3 date > b.txt
    4 date;ll  >> b.txt 2>&1 
    5 cat b.txt

    输出3:

    1 2019年 04月 04日 星期四 19:04:00 CST
    2 2019年 04月 04日 星期四 19:04:00 CST
    3 module.sh: 行 27: ll: 未找到命令

    4、声明变量类型

    1 #用来设置变量的属性,语法如下:
    2 declare [+/-] [aAfFgilprtux] [name=val]
    3 #+设置属性,取消属性 ,i表示整数 r表示只读变量等

    示例1:

    1 declare -i m=1
    2 echo ${m}

    输出1:

    1 1

    示例2:

    1 declare -i n="Hello"
    2 echo ${b}

    输出2:

    1 0

    5、read和位置参数

     示例1:

    1 #用来从标准输出中读取数据并赋值
    2 #示例
    3 read -t 20 -sp "Please input your password : " passwd 
    4 if [ ${passwd} = "123456" ] ;then
    5     echo "login sucess."
    6 else
    7     echo "login fail."
    8 fi
    • -t, 超时时间,单位为s
    • -s,静默模式,屏幕上不显示输入
    • -p,显示提示信息

    输出1:

    1 Please input your password : login sucess.

    位置参数

    示例2:

    插入以下代码并保存为module.sh

    1 echo "First arg is: $1"
    2 echo "Second arge is :$2"
    3 echo "All args is : $*"
    4 echo "Total args num is:$#

    输出2:

    1 First arg is: Hello
    2 Second arge is :World
    3 All args is : Hello World
    4 Total args num is:2

    6、shell调试

    使用-x参数调试shell脚本,通过-x可以看到运行过程中变量取值与运行情况。

    示例1:

    以下代码保存到test.sh中

    1 #!/bin/bash
    2 function say_hi(){
    3     local str1="hi"
    4     declare -i name    
    name=$1 5 echo "${str1},${name},Nice to meet you!" 6 } 7 say_hi "Vicent"

    调试脚本test.sh

    1 /bin/bash  -x test.sh

    预期输出为:

    1 hi,Vicent,Nice to meet you!

    实际输出1:

    1 + say_hi Vicent 123
    2 + local str1=hi
    3 + declare -i name=Vicent
    4 + echo 'hi,0,Nice to meet you!'
    5 hi,0,Nice to meet you

    通过 -x打印出来的信息可以看到name变量为强制声明为整数,所以把字符串装换成了数字0。

  • 相关阅读:
    动态库 DLL 封装二:dll封装方法
    动态库 DLL 封装一:dll分类
    C++读取配置文件ini
    WCHAR 字符串拼接
    关于web桌面应用的集成解决方案
    CSS Grid网格布局(转)
    使用 antd 的 form 组件来自定义提交的数据格式
    syslogd日志的一些作用
    我的三年感悟——避免无尽的自我内耗
    《被讨厌的勇气》读后感
  • 原文地址:https://www.cnblogs.com/webDepOfQWS/p/10656474.html
Copyright © 2020-2023  润新知