swift 脚本

作者: 枫林风雨 | 来源:发表于2018-12-20 17:07 被阅读31次

    swift脚本无论是.sh 格式,还是.swift格式,都需要以#!/usr/bin/env swift开头,来指定脚本的解释程序。当然,如果执行脚本的时候你指定了解释器,那头部相应的解释器就可以不加了。(使用env指定解释器)

    Shell嵌套swift

    swift的强大功能和灵活性使它甚至可以在shell脚本中直接运行swift代码,而想要混写只需在头部添加swift解释器。

    创建test.sh文件,输入下方所示代码,这个test.sh文件可以像普通的sh脚本一样运行:

    #!/usr/bin/env swift
    import Foundation
    
    var status :Int = 0
    status = 10
    print("Status = \(status)")
    

    执行./test.sh ,输出结果为Status = 10

    你可以在你的脚本里添加更多的swift功能来强壮脚本的功能,甚至可以使用import引入swift的别的库:

    #!/usr/bin/env swift
    import Darwin
    
    var status = arc4random_uniform(10)
    print("Status = \(status)")
    

    Swift调用shell

    swift调用shell指令没有这么简洁了,毕竟swift是高级语言,调用shell指令需要使用对象的方式来实现:

    #!/usr/bin/env swift
    
    import Foundation
    class Execution{
        class func execute(path:String,arguments:[String]? = nil) -> Int {
            let task = Process();
            task.launchPath = path
            if arguments != nil {
               task.arguments = arguments!
            }
            task.launch()
            task.waitUntilExit()
            return Int(task.terminationStatus)
        }
    }
    
    var status :Int = 0
    status = Execution.execute(path: "/bin/ls")
    print("Status = \(status)")
    
    //status = Execution.execute(path: "/bin/ls",arguments:["/"])
    //print("Status = \(status)")
    
    
    • 你可以直接使用Process对象来调用shell指令,我这里稍微做了点封装。
    稍微解释下代码
    1. 通过Process初始化一个进程对象(只是一个swift对象,此时还没有生成进程),launchPath设置进程的加载路径,arguments可以设置需要传给进程的参数。
    2. 初始并设置完毕后,调用launch方法正式开启进程,waitUntilExit会堵塞当前的swift脚本进程,等待我们创建的进程的任务执行完毕再往下执行。
    3. 最后我们在终端执行这个swift文件swift ~/Desktop/test.swift,输出结果为终端当前所在目录的所有文件(因为执行的是ls指令)和Status = 0字符串,其中0表示执行成功。

    注意:

    • 执行swift脚本需要使用swift命令:swift ~/Desktop/test.swift,如果你像示例一样在头部指定了解释器就可以不使用swift命令了,直接使用:~/Desktop/test.swift来执行。
    • 如果报错没有执行权限,执行:chmod +x ~/Desktop/test.swift,添加执行权限。

    相关文章

      网友评论

        本文标题:swift 脚本

        本文链接:https://www.haomeiwen.com/subject/ksnykqtx.html