| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package main
- import (
- "os"
- "strconv"
- )
- // 测试条件
- func cmd_test(fields []string, stdin *os.File, stdout *os.File, stderr *os.File) {
- res := true // 测试结果
- if len(fields) == 3 { // 2个参数,默认为测试文件
- info, err := os.Stat(fields[2]) // 获取文件状态
- if err != nil {
- res = false
- } else {
- switch fields[1] {
- case "-d": // 是否为目录文件
- res = info.Mode().IsDir()
- case "-f": // 是否为普通文件
- res = info.Mode().IsRegular()
- case "-s": // 是否大小不为0
- res = info.Size() > 0
- case "-r": // 是否可读
- res = info.Mode()&0444 > 0
- case "-w": // 是否可写
- res = info.Mode()&0222 > 0
- case "-x": // 是否可执行
- res = info.Mode()&0111 > 0
- default:
- res = false
- }
- }
- } else if len(fields) == 4 { // 3个参数,默认为测试数字
- a, err := strconv.Atoi(os.ExpandEnv(fields[1])) // 字符串转数字
- if err != nil {
- panic("test: integer expression expected: " + os.ExpandEnv(fields[1]))
- }
- b, err := strconv.Atoi(os.ExpandEnv(fields[3])) // 字符串转数字
- if err != nil {
- panic("test: integer expression expected: " + os.ExpandEnv(fields[3]))
- }
- switch fields[2] {
- case "-eq": // 是否相等
- res = a == b
- case "-ge": // 是否大于等于
- res = a >= b
- case "-gt": // 是否大于
- res = a > b
- case "-le": // 是否小于等于
- res = a <= b
- case "-lt": // 是否小于
- res = a < b
- case "-ne": // 是否不等于
- res = a != b
- case "==": // 是否等于
- res = a == b
- case "!=": // 是否不等于
- res = a != b
- default:
- res = false
- }
- }
- if !res { // 如果条件为假,则退出状态不为0
- panic("")
- }
- }
|