Shell编程基础_第1页
Shell编程基础_第2页
Shell编程基础_第3页
Shell编程基础_第4页
Shell编程基础_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 1 变量变量 变量赋值变量赋值 赋值操作符 前后都不能有空白 a 16 echo a let赋值 let a 16 5 for 循环中 for a in 7 8 9 11 do echo n a done 在 read 命令状态中 read a 变量替换变量替换 变量替换操作符 只有在变量被声明 赋值之后 变量才会是以本来的面目出现在脚本里 在 中还是会 发生变量替换 这被叫做部分引用 或叫弱引用 而在 中就不会发生变量替换 这叫做全引用 也叫强引用 root TEST161 bin hello A B C D root TEST161 bin echo hello A B C D root TEST161 bin echo hello A B C D root TEST161 bin echo hello hello root TEST161 bin echo hello hello 与与 var 与 var 无区别 var 这种写法为了避免上下文错误 root TEST161 bin echo hello A B C D 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 2 root TEST161 bin echo hello A B C D root TEST161 bin echo hello A B C D root TEST161 bin echo hello A B C D 是命令替换的一种方式 和 作用一样 root TEST161 bin m uname o root TEST161 bin echo m GNU Linux root TEST161 bin n uname o root TEST161 bin echo n GNU Linux 环境变量环境变量 变量名功能 USER已登录用户的用户名 UID已登录用户的数字用户 id HOME用户的主目录 PWD当前工作目录 SHELLshell 名 进程 id 或正在运行的 Bashshell 进程或其他进程的 PID PPID启动这个进程的进程的进程 id 即父进程的 id 0 这个程式的执行名字 n这个程式的第 n 个参数值 n 1 9 这个程式的所有参数 这个程式的参数个数 上一个命令的退出码 root TEST161 bin echo SHELL HOME PWD bin bash root usr local tomcat bin root TEST161 bin exit 0 echo exit 4 echo 0 4 设置变量设置变量 和 是 shell 参数 而不是变量 它们只能被引用 无法对它们进行赋值 创建 shell 变量时 通常都会希望将该变量 export 到环境中 这样从这个 shell 中启 动的其他进程也都可以使用该变量了 但所导出的变量对父 shell 不可用 root TEST161 bin bash 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 3 root TEST161 bin echo 32621 root TEST161 bin export var1 var1 root TEST161 bin echo var1 var1 root TEST161 bin sh sh 2 05b echo var1 var1 sh 2 05b echo 889 sh 2 05b echo PPID 32621 sh 2 05b exit root TEST161 bin echo var1 var1 root TEST161 bin exit root TEST161 bin bash root TEST161 bin echo var1 root TEST161 bin 取消变量取消变量 unset 命令从 Bash shell 中清除变量 root TEST161 bin var var1 root TEST161 bin echo var var1 root TEST161 bin unset var root TEST161 bin echo var root TEST161 bin 替换操作符替换操作符 var value var value 如果 存在 就返回 的值 如果 不 存在 就返回 var value var value 如果 存在 就返回 的值 如果 不 存在 就把 设置为 并返回 var value var value 如果 存在 就返回 的值 如果 不 存在 就返回 NULL 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 4 var value var value 如果 存在 就返回 的值 如果 不 存在 就退出命令或脚本并显示用 设置的错误消息 如果未设 置 就显示默认的错误消息 Parameter null or not set var value var value 如果 存在且不是 NULL 就返回 的值 如果 不存在或者是 NULL 就返回 var value var value 如果 存在且不是 NULL 就返回 的值 如果 不存在或者是 NULL 就把 设置为 并返回 var value var value 如果 存在且不是 NULL 就返回 的值 如果 不存在或者是 NULL 就返回 NULL var value var value 如果 存在且不是 NULL 就返回 的值 如果 不存在或者是 NULL 就退出命令或脚本并显示用 设置的错误消息 如果未设置 就显示默认的错误消息 Parameter null or not set If else 分支 测试分支 测试 If else 结构结构 if condition true then command 1 command 2 else 可选的 如果不需要可以省去 如果原始的条件测试结果是 false 那么添加默认的代码来执行 command 3 command 4 fi Else if 和和 elif if condition1 then command1 elif condition2 Same as else if 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 5 then command2 else default command fi 嵌套的嵌套的 if else if condition1 then if condition2 then do something 这里只有在 condition1 和 condition2 都可用的时候才行 fi fi test 和和 内置命令 test 根据表达式 expr 求值的结果返回 0 真 或 1 假 也可以使用方 括号 test expr 和 expr 是等价的 可以用 检查返回值 整数比较整数比较 eq等于 如 if a eq b ne不等于 如 if a ne b gt大于 如 if a gt b ge大于等于 如 if a ge b lt小于 如 if a lt b le小于等于 如 if a le b 小于 需要双括号 如 a b 小于等于 需要双括号 如 a 大于 需要双括号 如 a b 大于等于 需要双括号 如 a b 字符串比较字符串比较 等于 如 if a b 等于 如 if a b 与 等价 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 6 注意 的功能在 和 中的行为是不同的 如下 1 a z 如果 a 以 z 开头 模式匹配 那么将为 true 2 a z 如果 a 等于 z 字符匹配 那么结果为 true 3 4 a z File globbing 和 word splitting 将会发生 5 a z 如果 a 等于 z 字符匹配 那么结果为 true 一点解释 关于 File globbing 是一种关于文件的速记法 比如 c 就是 再如 也是 但是 file globbing 并不是严格的正则表达式 虽然绝大多数情况下结构比较像 不等于 如 if a b 这个操作符将在 结构中使用模式匹配 小于 在 ASCII 字母顺序下 如 if a b if a b 注意 在 结构中 大于 在 ASCII 字母顺序下 如 if a b if a b 注意 在 结构中 需要被转义 z字符串为 null 就是长度为 0 n 字符串不为 null 注意 使用 n 在 结构中测试必须要用 把变量引起来 使用一个未被 的字符串来使用 z 或者就是未用 引用的字符串本身 放到 结构中虽然一般情况下可 以工作 但这是不安全的 习惯于使用 来测试字符串是一种好习惯 文件测试文件测试 e文件存在 a 文件存在 这个选项的效果与 e 相同 但是它已经被弃 ffile 是一个 regular 文件 不是目录或者设备 s文件长度不为 0 d文件是个目录 b文件是个块设备 软盘 cdrom 等等 c文件是个字符设备 键盘 modem 声卡等等 更多的参数 可以通过 man test 查看 混合比较混合比较 a 逻辑与 exp1 a exp2如果 exp1 和 exp2 都为 true 的话 这个表达式将返回 true 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 7 o 逻辑或 exp1 o exp2 如果 exp1 和 exp2 中有一个为 true 的话 那么这个表达式就返回 true 这与 Bash 的比较操作符 condition1 command esac 注意 对变量使用 并不是强制的 因为不会发生单词分离 每句测试行 都以右小括号 结尾 每个条件块都以两个分号结尾 case 块的结束以 esac case 的反向拼写 结尾 运行 tail 40 etc init d iptables 得到如下内容 case 1 in 1 是位置参数 start stop start stop x IPTABLES SAVE ON STOP xyes restart restart condrestart e VAR SUBSYS IPTABLES status status panic flush n delete set policy DROP save save 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 9 echo Usage 0 start stop restart condrestart status panic save exit 1 esac 算术操作算术操作 算术操作符算术操作符 加 减 乘 除 取模 幂运算 此外 还支持 使用使用 root TEST161 bin n 1 root TEST161 bin let n n 1 root TEST161 bin echo n 2 root TEST161 bin n n 1 root TEST161 bin echo n 3 root TEST161 bin n n 1 root TEST161 bin echo n 4 root TEST161 bin n n 1 root TEST161 bin echo n 5 root TEST161 bin n n 1 root TEST161 bin n n 1 root TEST161 bin echo n 7 root TEST161 bin let n root TEST161 bin echo n 8 root TEST161 bin n root TEST161 bin echo n 9 root TEST161 bin echo n root TEST161 bin n root TEST161 bin echo n 10 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 10 root TEST161 bin n root TEST161 bin echo n 11 位操作符位操作符 左移 1 位 每次左移都将乘 2 左移几位 号后边将给出左移几位 let var 右移 1 位 每次右移都将除 2 右移几位 echo y 0 root TEST161 root y expr 1 do tar czf var tgz var a do echo n a done 1 2 3 4 5 6 7 8 9 10 root TEST161 new while 这种结构在循环的开头判断条件是否满足 如果条件一直满足 那就一直循环下去 与 for 循环的区别是 这种结构适合用在循环次数未知的情况下 结构 while condition do command done root TEST161 new var 0 root TEST161 new limit 10 root TEST161 new while var lt limit do echo var var expr var 1 done 0 1 2 3 4 5 6 7 8 9 重复 C 风格的语法 root TEST161 new var 0 root TEST161 new limit 10 root TEST161 new while var do echo var var 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 17 done 0 1 2 3 4 5 6 7 8 9 Until 这个结构在循环的顶部判断条件 并且如果条件一直为 false 那就一直循环下去 与 while 相反 结构 until condition is true do command done 用法跟 while 相似 就不举例了 I O 重定向重定向 文件描述符文件描述符 默认情况下始终有 3 个 文件 处于打开状态 stdin 键盘 stdout 屏幕 and stderr 错误 消息输出到屏幕上 这 3 个文件和其他打开的文件都可以被重定向 对于重定向简单的 解释就是捕捉一个文件 命令 程序 脚本 或者甚至是脚本中的代码块的输出 然后将这 些输出作为输入发送到另一个文件 命令 程序 或脚本中每个打开的文件都会被分配一个 文件描述符 stdin stdout 和 stderr 的文件描述符分别是 0 1 和 2 对于正在打开的额外 文件 保留了描述符 3 到 9 在某些时候将这些格外的文件描述符分配给 stdin stdout 或 者是 stderr 作为临时的副本链接是非常有用的 在经过复杂的重定向和刷新之后需要把它 们恢复成正常的样子 COMMAND OUTPUT 重定向 stdout 到一个文件 如果没有这个文件就创建 否则就覆盖 filename 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 18 会把文件 filename 截断为 0 长度 如果文件不存在 那么就创建一个 0 长度的文件 与 touch 的效果相同 COMMAND OUTPUT 重定向 stdout 到一个文件 如果文件不存在 那么就创建它 如果存在 那么就追加到文件后边 1 filename 重定向 stdout 到文件 filename 1 filename 重定向并追加 stdout 到文件 filename 2 filename 重定向 stderr 到文件 filename 2 filename 重定向并追加 stderr 到文件 filename filename 将 stdout 和 stderr 都重定向到文件 filename 2 1 重定向 stderr 到 stdout 得到的错误消息与 stdout 一样 发送到一个地方 i j 重定向文件描述符 i 到 j 指向 i 文件的所有输出都发送到 j 中去 j 默认的 重定向文件描述符 1 stdout 到 j 所有传递到 stdout 的输出都送到 j 中去 0 FILENAME 是成对命令 并且通常都是结合使用 关闭文件描述符关闭文件描述符 n 关闭输入文件描述符 n 0 关闭输出文件描述符 n 1 关闭 stdout 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 19 exec 内建命令 exec 是用来给文件分配一个文件描述符 使用 exec fdN file 分配文件描述符 N 给 file 进行输出 exec fdN file 示例 exec 6 0 将文件描述符 6 与 stdin 链接起来 保存了 stdin exec data file stdin 被文件 data file 所代替 read a1 读取文件 data file 的第一行 read a2 读取文件 data file 的第二行 echo echo Following lines read from file echo echo a1 echo a2 exec 0 6 6 现在将 stdin 从 fd 6 中恢复 因为刚才我们把 stdin 重定向到 6 了 然后关闭 fd 6 6 好让这个描述符继续被其他进程所使用 使用 I O 重定向的形式来将一个命令序列传递到一个交互程序或者命令中 比如 ftp cat 或者 ex 文本编辑器 1 COMMAND InputComesFromHERE 2 3 InputComesFromHERE limit string 用来划定命令序列的范围 注 两个相同的 limit string 之间就是命令序列 特殊 符号 do echo line done hello world EIF hello 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 20 world 列表结构列表结构 与列表 and list 和 或列表 or list 结构提供一种处理一串连续命令的方法 它们能 有效地替代复杂的嵌套 if then 语句甚至可以代替 case 语句 与列表与列表 and list command 1 command 2 command 3 command n 如果每个命令都返回真值 0 将会依次执行下去 当某个命令返回假值 非零值 整个命 令链就会结束执行 第一个返回假的命令将会是最后一个执行的命令 后面的都不再执行 或列表或列表 or list command 1 command 2 command 3 command n 只要前一个命令返回假命令链就会依次执行下去 一旦有一个命令返回真 命令链就会 结束 第一个返回真的命令将会是最后一个执行的命令 这显然和 与列表 正好相反 root TEST161 root 1 eq 1 echo ok 1 eq 2 echo ok2 ok root TEST161 root 1 eq 1 echo ok 1 eq 2 echo ok2 ok ok2 root TEST161 root 1 eq 2 echo ok 1 eq 2 echo ok2 ok2 数组数组 赋值赋值 root TEST161 root area2 zero one two three four root TEST161 root echo area2 0 zero root TEST161 root echo area2 3 three root TEST161 root area2 3 3 root TEST161 root echo area2 3 3 root TEST161 root echo area2 4 root TEST161 root echo area2 611d9efdb8a2a89cefa3449dbb5d96f6 pdf作者 komatsu 21 5 操作操作 大部分标准的字符串操作符可以用于数组操作 提取尾部的子串

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论