Shell 概要 Nov 19, 2021 · shell · 分享到: shell关键概念中英文 shell脚本的第一行 shell脚本的重定向符 一些特殊符号 变量 PATH路径中:的作用 访问Shell的的参数 简单的命令跟踪 shell脚本中的“.” Shell 概述 shell关键概念中英文 blank:包含空格space和制表符tab control operator, 控制符:包含newline, '||', '&&', '&', ';', ';;', ';&', ';;&', '|', '|&', '(', ')' field, 字段:shell扩展之一带来的文本单位。扩展后,当执行命令时,生成的字段将用作命令名称和参数 job, 作业:在同一个进程组中的一系列进程,可由管道或衍生的进程组成 job control, 作业控制:一种机制,用户可以通过该机制选择性地停止(挂起)并重新开始(恢复)进程的执行。 metacharacter, 元字符:当不在引号中时,用于分割单词的字符,包括space, tab, newline, '|', '&', ';', '(', ')', '<', '>' operator, 操作符:分为控制符或重定向符,操作符由至少一个元字符组成 process group, 进程组:一系列具有相同组进程ID的进程 reserved word, 保留字:对shell具有特殊含义的单词。,大多数保留字用于流程控制,如for, while, if signal, 信号:一种机制,内核可以通过该机制将系统中发生的事件通知给进程 token, 标记:可以被shell认为是一个独立单元的一串字符,分为单词word或操作符operator word, 单词:可以被shell认为是一个单元的一串字符,单词不能包括不带引号的元字符。 shell脚本的第一行 1> #! /bin/sh - -符号表示没有其他参数,防止一些欺骗攻击 shell脚本的第一行长度一般不要超过64个字符 shell脚本的重定向符 > 表示将命令输出的内容重定向到其他位置 1$ cat > nusers 2who | wc -l 即将who | wc -l复制到nusers文件中 >> 表示已用附加的方式重定向到指定文件。区别在于如果目标文件存在,会将内容附加到文档后面,而不会覆盖文档。 <表示从其他地方而不是键盘接受输入patch --verbose --backup -p1 < /tmp/cx,表示从/tmp/cx文件输入内容 一些特殊符号 ; 表示一条命令输入结束,命令按顺序执行 & 表示后台执行&之前的命令,直接在前台执行&之后的命令。 && 用法command 1 && command 2,表示当command 1执行成功后,再执行command 2,如果不成功,则不执行command 2。 || 用法command 1 || command 2,表示若command 1执行失败,则执行command 2,如果执行成功,则不执行command 2。 变量 Shell脚本中变量可以是(并且通常是)空值,null。 变量赋值的时候VarName=VarValue,如果VarValue中间有空格,则需要使用双引号,包括VarValue。变量引用的时候需要使用$符号,$VarName;如果想在CMD终端显示有空格的VarValue,需要使用echo命令。 1$ fullname="hello world" 2$ echo $fullname 3hello world PATH路径中:的作用 表示从哪里开始搜寻命令 访问Shell的的参数 访问shell的参数也就是说shell的命令行参数,例如myshell para1 para2;在Shell函数里面用$1,$2,$3,.....,$9,${10}表示。当参数大于10个时,由于历史原因,需要用大括号包裹起来。 删除一个变量可以使用unset命令,变量名不用加$,即unset x 设置环境变量export VarName=VarValue,使用env命令可以查看所有的环境变量 预定义变量和位置变量(位置变量也是预定义变量的一种,只是比较常见单独拿出来说) 预定义变量有3个,$?,$$.$!;位置变量有:$n,$*,$@,$#。 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 $# 传递给脚本或函数的参数个数。 $* 传递给脚本或函数的所有参数。这种方式将所有参数作为一个整体。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同,会将每一个变量法分开表示。 $? 上个命令的退出状态,或函数的返回值。$?:表示上一个命令执行的结果,如果正常执行则返回0,非正常执行则为错误代码 $$ 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 $! 后台最后一个进程所表示的PID 简单的命令跟踪 在Shell中输入 set -x 表示每一个命令使用+表示执行到哪一个命令 set +x 表示取消跟踪 shell -x CMD 表示追踪此CMD命令 shell脚本中的“.” shell脚本中,使用“.”等同于使用source,相当于在脚本中执行另一个脚本,但是执行的时候共用一个shell。 source命令用法: source FileName 作用:在当前bash环境下读取并执行FileName中的命令。该命令通常用命令“.”来替代。source filepath或者. filepath,sh filepath或者./filepath区别: sh filepath会重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell是新建的,其改变的变量不会被带回父shell,除非使用export。 source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。