Shell全面

echo

  • 打印

变量

  • readOnly 将变量变成只读变量
  • unset 删除变量
  • 单引号里的任何东西都会原样输出
  • 双引号里的可以有变量 也可以进行转意 所以双引号比单引号好用
  • ``这里面可以继续写命令

字符串 str

  • str :读取字符串的长度

  • str:1:4 :截取字符串第1到4个
  • 课外作业 :字符串的各种处理

数组

  • 数组名=(值1 值2 ... 值n)
  • array_name[0]=value0
  • ${数组名[下标]}
  • ${array_name[@]} 读取array中的所有元素
  • 数组取长度的方式和字符串一样 也是在前面加上# 但是要注意取得是整个数组的长度 还是单个数组元素的长度

$0 $1 $2 $3

  • $0为文件名 之后就是我执行这个脚本带的参数
  • $# 传递到脚本的参数个数
  • $* 直接显示所有当成1个参数打印的
  • $@ 有几个参数 就打印几个参数
  • $$ 脚本运行进程ID

运算 检查是否正确 用[]框起来 去if

  • +-*/%= == != 和java一样 在Mac 中 $((表达式)) 就可以表示 expr
  • 关系运算符 -eq -ne - gt (GREATER THAN) -lt - ge -le
  • 逻辑运算符 || && -o -a
  • 字符串运算符 -z -n = != [str]
  • 文件运算符
  • -f 文件是否存在
  • -x -r -w 文件是否可执行
  • -s 是否为空
  • -e 目录(文件)是否存在
  • -d 是否为目录

echo printf

  • echo "It is a test" > myfile 显示结果定向至文件
  • printf 主要是格式化用的 类似于C %s\n %-10s %4.2f

if else

  • if condition
    then
    command1
    command2
    ...
    commandN
    elif condition2
    then
    command2
    else
    command
    fi

  • for var in item1 item2 ... itemN
    do
    command1
    command2
    ...
    commandN
    done

  • case 值 in
    模式1)
    command1
    command2
    ...
    commandN
    ;;
    模式2)
    command1
    command2
    ...
    commandN
    ;;
    esac

  • break continue

函数

  • func(){}
  • 调用 func 返回结果使用 $?
  • 传递参数
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

重定向

  • 输出到文件

  • < 从文件输入
  • 输出追加到文件

  • << 输入追加到文件

引用外部脚本

  • . filename source filename

${} $[] $() $(())

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容