#其他shell: dash shell,zsh shell dash shell dash shell特性 尽管bash shell和dash shell都以Bourne shell为样板,由于dash的目标是简洁,因此它的环境变量比bash shell少多了。dash变量和bash变量之间有一个巨大的差异,dash shell不支持数组。 一、dash 命令行参数 dash命令行参数 参 数 描 述 -a 导出分配给shell的所有变量 -c 从特定命令字符串中读取命令 -e 如果是非交互式shell的话,在有未经测试的命令失败时立即退出 -f 显示路径名通配符 -n 如果是非交互式shell的话,读取命令但不执行它们 -u 在尝试展开一个未设置的变量时,将错误消息写出到 STDERR -v 在读取输入时将输入写出到 STDERR -x 在执行命令时将每个命令写出到 STDERR -I 在交互式模式下,忽略输入中的 EOF 字符 -i 强制shell运行在交互式模式下 -m 启用作业控制(在交互式模式下默认开启) -s 从 STDIN 读取命令(在没有指定文件参数时的默认行为) -E 启用emacs命令行编辑器 -V 启用vi命令行编辑器 二、dash 环境变量 1. 默认环境变量 dash shell用 set 命令来显示环境变量 2. 位置参数 $0 :shell的名称。 $n :第n个位置参数。 $* :含有所有参数内容的单个值,由 IFS 环境变量中的第一个字符分隔;没定义 IFS 的话,由空格分隔。 [email protected] :将所有的命令行参数展开为多个参数。 $# :位置参数的总数。 $? :最近一个命令的退出状态码。 $- :当前选项标记。 $$ :当前shell的进程ID(PID)。 $! :最近一个后台命令的PID。 3. 用户自定义的环境变量 $ testing=10 ; export testing -- 如果不用 export 命令,用户自定义的环境变量就只在当前shell或进程中可见 $ echo $testing 10 三、dash 内建命令 dash shell内建命令 命 令 描 述 alias 创建代表文本字符串的别名字符串 bg 以后台模式继续执行指定的作业 cd 切换到指定的目录 echo 显示文本字符串和环境变量 eval 将所有参数用空格连起来 ① exec 用指定命令替换shell进程 exit 终止shell进程 export 导出指定的环境变量,供子shell使用 fg 以前台模式继续执行指定的作业 getopts 从参数列表中中提取选项和参数 hash 维护并提取最近执行的命令及其位置的哈希表 pwd 显示当前工作目录 read 从 STDIN 读取一行并将其赋给一个变量 readonly 从 STDIN 读取一行并赋给一个只读变量 printf 用格式化字符串显示文本和变量 set 列出或设置选项标记和环境变量 shift 按指定的次数移动位置参数 test 测试一个表达式,成立的话返回 0 ,不成立的话返回 1 times 显示当前shell和所有shell进程的累计用户时间和系统时间 trap 在shell收到某个指定信号时解析并执行命令 type 解释指定的名称并显示结果(别名、内建、命令或关键字) ulimit 查询或设置进程限制 umask 设置文件和目录的默认权限 unalias 删除指定的别名 unset 从导出的变量中删除指定的变量或选项标记 wait 等待指定的作业完成,然后返回退出状态码 dash 脚本编程 创建 dash 脚本 在shell脚本的第一行指定:#!/bin/dash 不能使用的功能 1. 算术运算 dash shell支持 expr 命令和双圆括号方法,但不支持方括号方法。 2. test 命令 test 命令不能识别用作文本比较的==符号,只能识别=符号 3. function 命令 dash shell不支持 function 语句。在dash shell中,你必须用函数名和圆括号定义函数: func1() { echo "This is an example of a function" } zsh shell zsh shell提供了一组核心内建命令,并提供了添加额外命令模块(command module)的能力。 zsh shell 的组成 shell 选项 zsh shell命令行参数 参 数 描 述 -c 只执行指定的命令,然后退出 -i 作为交互式shell启动,提供一个命令行交互提示符 -s 强制shell从 STDIN 读取命令 -o 指定命令行选项 -o 参数有些容易让人误解。它允许你设置shell选项来定义shell的功能。到目前为止,zsh shell是所有shell中可定制性最强的 内建命令 1. 核心内建命令 zsh核心内建命令 命 令 描 述 alias 为命令和参数定义一个替代性名称 autoload 将shell函数预加载到内存中以便快速访问 bg 以后台模式执行一个作业 bindkey 将组合键和命令绑定到一起 builtin 执行指定的内建命令而不是同样名称的可执行文件 bye 跟 exit 相同 cd 切换当前工作目录 chdir 切换当前工作目录 command 将指定命令当作外部文件执行而不是函数或内建命令 declare 设置变量的数据类型(同 typeset ) dirs 显示目录栈的内容 disable 临时禁用指定的散列表元素 disown 从作业表中移除指定的作业 echo 显示变量和文本 emulate 用zsh来模拟另一个shell,比如Bourne、Korn或C shell enable 使能指定的散列表元素 eval 在当前shell进程中执行指定的命令和参数 exec 执行指定的命令和参数来替换当前shell进程 exit 退出shell并返回指定的退出状态码。如果没有指定,使用最后一条命令的退出状态码 export 允许在子shell进程中使用指定的环境变量名及其值 false 返回退出状态码 1 fc 从历史记录中选择某范围内的命令 fg 以前台模式执行指定的作业 float 将指定变量设为保存浮点值的变量 functions 将指定名称设为函数 getln 从缓冲栈中读取下一个值并将其放到指定变量中 getopts 提取命令行参数中的下一个有效选项并将它放到指定变量中 hash 直接修改命令哈希表的内容 history 列出历史记录文件中的命令 integer 将指定变量设为整数类型 jobs 列出指定作业的信息,或分配给shell进程的所有作业 kill 向指定进程或作业发送信号(默认为 SIGTERM ) let 执行算术运算并将结果赋给一个变量 limit 设置或显示资源限制 local 为指定变量设置数据属性 log 显示受 watch 参数 ① 影响的当前登录到系统上的所有用户 logout 同 exit ,但只在shell是登录shell时有效 popd 从目录栈中删除下一项 print 显示变量和文本 printf 用C风格的格式字符串来显示变量和文本 pushd 改变当前工作目录,并将上一个目录放到目录栈中 pushln 将指定参数放到编辑缓冲栈中 pwd 显示当前工作目录的完整路径名 read 读取一行,并用 IFS 变量将数据字段赋给指定变量 readonly 将值赋给不能修改的变量 rehash 重建命令散列表 set 为shell设置选项或位置参数 setopt 为shell设置选项 shift 读取并删除第一个位置参数,然后将剩余的参数向前移动一个位置 source 找到指定文件并将其内容复制到当前位置 suspend 挂起shell的执行,直到它收到 SIGCONT 信号 test 如果指定条件为 TRUE 的话,返回退出状态码 0 times 显示当前shell以及shell中所有运行进程的累计用户时间和系统时间 trap 阻断指定信号从而让shell无法处理,如果收到信号则执行指定命令 true 返回退出状态码 0 ttyctl 锁定和解锁显示 type 显示shell会如何解释指定的命令 typeset 设置或显示变量的特性 ulimit 设置或显示shell或shell中运行进程的资源限制 umask 设置或显示创建文件和目录的默认权限 unalias 删除指定的命令别名 unfunction 删除指定的已定义函数 unhash 删除散列表中的指定命令 unlimit 取消指定的资源限制 unset 删除指定的变量特性 unsetopt 删除指定的shell选项 wait 等待指定的作业或进程完成 whence 显示指定命令会如何被shell解释 where 如果shell找到的话,显示指定命令的路径名 which 用csh风格的输出显示指定命令的路径名 zcompile 编辑指定的函数或脚本,加速自动加载 zmodload 对可加载zsh模块执行特定操作 2. 附加模块 模 块 描 述 zsh/datetime 额外的日期和时间命令及变量 zsh/files 基本的文件处理命令 zsh/mapfile 通过关联数组来访问外部文件 zsh/mathfunc 额外的科学函数 zsh/pcre 扩展的正则表达式库 zsh/net/socket Unix域套接字支持 zsh/stat 访问stat系统调用来提供系统的统计状况 zsh/system 访问各种底层系统功能的接口 zsh/net/tcp 访问TCP套接字 zsh/zftp 专用FTP客户端命令 zsh/zselect 阻塞,直到文件描述符就绪才返回 zsh/zutil 各种shell实用工具 3. 查看、添加和删除模块 zmodload 命令是zsh模块的管理接口。通常习惯将 zmodload 命令放进$HOME/.zshrc启动文件中,这样在zsh启动时常用的函数就会自动加载。 zmodload 命令不加任何参数会显示zsh shell中当前已安装的模块。 % zmodload zsh/zutil zsh/complete zsh/main zsh/terminfo zsh/zle zsh/parameter % zmodload zsh/zftp -- 在 zmodload 命令行上指定模块名称,添加新模块 zsh/zftp。加载成功不会显示信息。 % zmodload -u zsh/zftp -- 要删除已安装的模块,用 -u 参数和模块名。 zsh 脚本编程 数学运算 1. 执行计算 sh shell提供了执行数学运算的两种方法: ①let 命令 ②双圆括号 % let value1=" 4 * 5.1 / 3.2 " -- 在使用 let 命令时,你应该在算式前后加上双引号,这样才能使用空格 % echo $value1 6.3750000000 % printf "%6.3f\n" $value1 -- 使用浮点数会带来精度问题。为了解决这个问题,通常要使用 printf 命令,并指定能正确显示结果所需的小数点精度 6.375 % value1=$(( 4 * 5.1 )) -- 使用双圆括号 % (( value2 = 4 * 5.1 )) % printf "%6.3f\n" $value1 $value2 20.400 20.400 2. 数学函数 如果安装了 zsh/mathfunc 模块,你就会拥有远远超出你可能需要的数学函数 % value1=$(( sqrt(9) )) zsh: unknown function: sqrt % zmodload zsh/mathfunc % value1=$(( sqrt(9) )) % echo $value1 3. 结构化命令 zsh shell为shell脚本提供了常用的结构化命令: if-then-else 语句 for 循环(包括C语言风格的) while 循环 until 循环 select 语句 case 语句 zsh中的每个结构化命令采用的语法都跟你熟悉的bash shell中的一样。zsh shell还包含了另外一个叫作 repeat 的结构化命令 repeat 命令: repeat param -- param 参数必须是一个数字或能算出一个数值的数学算式 do commands done % cat test1 #!/bin/zsh # using the repeat command value1=$(( 10 / 2 )) -- 值为5,执行5次 repeat $value1 do echo "This is a test" done $ ./test1 This is a test This is a test This is a test This is a test This is a test 函数 zsh shell支持使用 function 命令或通用圆括号定义函数名的方式来创建自定义函数 % function functest1 { > echo "This is the test1 function" } % functest2() { > echo "This is the test2 function" } % functest1 This is the test1 function % functest2 This is the test2 function
原文地址:https://www.cnblogs.com/TianMu/p/11015422.html
时间: 2024-10-06 09:17:01