Linux Bash Shell快速入门 在线教程

合集下载

linux操作系统任务十shell 编程基础

linux操作系统任务十shell 编程基础

不被引号包围的字符串中出现变量时也会被解析,这一点和双引号" 不被引号包围的字符串 "包围的字符串一样。字符串中不能出现空格,否则空格后边的字符
串会作为其他变量或者命令解析。
管道操作
Shell数组中可以存放多个值。Bash Shell 只支持一维数组,初始化时不 需要定义数组大小。在 Shell 中用括号( )来表示数组,数组元素之间用空 格来分隔。定义数组的一般形式如下: Array_name=(ele1 ele2 ele3... eleN)
创建shell脚本
可以在Shell脚本中创建用户自定义变量,用户变量可以存储临时数据 并在整个脚本中使用,类似于程序语言中的变量。变量命名规则如下 :
1.任意字母数字或下划线,长度不超过20个,不能以数字开头; 2.用户变量区分大小写; 3.使用=赋值,变量、=、值之间不能有空格;
创建shell脚本
引用变量的时候一定要在前面加 $,对变量赋值的时候,被赋值的变量不需要 加 $。 有时候用户需存储某个命令的输出信息,可以把命令的输出赋值给变量,赋值 规则有两种: 1.`命令` ,`是反引号,不是引号。 2.$(命令)
例: LS=`ls` echo $LS echo "===================================" LSL=$(ls -l) echo $LSL
$a -ne $b
检测左边的数是否大于右边的,如果是返回 true。 $a -gt $b
检测左边的数是否小于右边的,如果是返回 true。 $a -lt $b
检测左边的数是否大于等于右边的,如果是返回 true。
检测左边的数是否小于等于右边的,如果是返回 true。
$a -ge $b [ $a -le $b ]

bash教程

bash教程

bash教程Bash是一个常用的命令行shell,适用于Linux和macOS操作系统。

它提供了一种与计算机交互的方法,可以执行命令、编辑文件和处理数据等操作。

下面是一些常用的Bash命令和技巧,供参考:1. 认识BashBash是Bourne Again SHell的缩写,是Unix的一个自由软件,是Linux和macOS默认的shell。

2. 查看当前所在路径使用`pwd`命令可以查看当前所在路径。

比如输入`pwd`后回车,你将看到当前所在路径的完整名称。

3. 列出文件和文件夹使用`ls`命令可以列出当前路径下的文件和文件夹。

比如输入`ls`后回车,你将看到当前路径下的所有文件和文件夹的名称。

4. 切换路径使用`cd`命令可以切换路径。

比如输入`cd /path/to/folder`后回车,你将切换到指定路径。

5. 创建文件夹使用`mkdir`命令可以创建文件夹。

比如输入`mkdir foldername`后回车,你将在当前路径下创建一个名为"foldername"的文件夹。

6. 创建文件使用`touch`命令可以创建文件。

比如输入`touch filename`后回车,你将在当前路径下创建一个名为"filename"的空文件。

7. 复制文件和文件夹使用`cp`命令可以复制文件和文件夹。

比如输入`cp file1file2`后回车,你将复制名为"file1"的文件并将其重命名为"file2"。

8. 移动文件和文件夹使用`mv`命令可以移动文件和文件夹。

比如输入`mv file1 /path/to/destination`后回车,你将把名为"file1"的文件移动到指定路径下。

9. 删除文件和文件夹使用`rm`命令可以删除文件和文件夹。

比如输入`rm file1`后回车,你将删除名为"file1"的文件。

51CTO学院Linux编程视频课程Shell从入门到精通(完整版)

51CTO学院Linux编程视频课程Shell从入门到精通(完整版)

Linux编程视频课程Shell从入门到精通(完整版)课程目标咱们能够通过本次系列的编程技术学习,把握企业里面的运维编程必备脚本,同时把握企业运维到底要求会什么东西,有哪些是咱们必需要把握的知识。

适用人群适合有linux基础知识,想进一步学好linux的列位同窗,我也会跟大伙儿一路尽力,分享、感恩、成长!课程简介【Linux编程视频课程Shell从入门到精通(完整版)】课程目标:本套课程适用于初学者和各类运维人员,咱们能够通过本次系列的编程技术学习,把握企业里面的运维编程必备脚本,同时把握企业运维到底要求会什么东西,有哪些是咱们必需要把握的知识,为咱们的运维能力保驾护航、增值加薪,让咱们的运维加倍容易,真正做到懒人运维,而不是天天苦逼的搬效劳器,天天无奈的去救火!适合对象:适合有linux基础知识,想进一步学好linux的列位同窗,我也会跟大伙儿一路尽力,分享、感恩、成长!学习条件:需要有耐心、对自己负责,对自己的人一辈子负责,选择了决定以后,选择了就全力以赴去行动,相信结果值得拥有!学习宣言:让咱们乘着Linux的大船,奔向咱们以后的方向!期待和祝愿同窗们每一个人都有好的收成,天天都有新的起点!人人都能学会咱们的linux下Shell编程。

课程1[免费观看]14分钟说到Shell编程,我想很多从事Linux运维工作的朋友都不陌生,都对Shell有大体的了解,可能大伙儿刚开始接触Shell的时候,有各类方式?能不能不学?高大上?究竟是浮云?仍是神马?很难啊?我想告知大伙儿的是,大伙儿有这些方式一点都不感觉惊讶,什么缘故?这些都很正常,关于任何一件情形在未开始之前,确信会有总总假设,那我今天想说的是,学完人人都会Shell编程后,咱们会感觉一切的Shell都是浮云,咱们每一个人都能专门好的利用它,驾驭它,更好的完成咱们日常运维的工作。

曾经有人说过,玩Linux不明白Shell,那确实是不懂L inux;此刻细细体味确实是如此。

Linux与Unixshell编程指南(完整高清版).pdf

Linux与Unixshell编程指南(完整高清版).pdf

Linux与Unixshell编程指南(完整⾼清版).pdf找到⼀本很详细的Linux Shell脚本教程,其实⾥⾯不光讲了Shell脚本编程,还介绍了系统的各种命令本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的⽂字处理以及少量的系统管理问题。

本书内容全⾯、⽂字简洁流畅,适合Shell编程⼈员学习、参考。

⽬录译者序前⾔第⼀部分 shell第1章⽂件安全与权限 11.1 ⽂件 11.2 ⽂件类型 21.3 权限 21.4 改变权限位 41.4.1 符号模式 41.4.2 chmod命令举例 51.4.3 绝对模式 51.4.4 chmod命令的其他例⼦ 61.4.5 可以选择使⽤符号模式或绝对模式 71.5 ⽬录 71.6 suid/guid 71.6.1 为什么要使⽤suid/guid 81.6.2 设置suid/guid的例⼦ 81.7 chown和chgrp 91.7.1 chown举例 91.7.2 chgrp举例 91.7.3 找出你所属于的⽤户组 91.7.4 找出其他⽤户所属于的组 101.8 umask 101.8.1 如何计算umask值 101.8.2 常⽤的umask值 111.9 符号链接 121.9.1 使⽤软链接来保存⽂件的多个映像 121.9.2 符号链接举例 121.10 ⼩结 13第2章使⽤find和xargs 142.1 find命令选项 142.1.1 使⽤name选项 152.1.2 使⽤perm选项 162.1.3 忽略某个⽬录 162.1.4 使⽤user和nouser选项 162.1.5 使⽤group和nogroup选项 162.1.6 按照更改时间查找⽂件 172.1.7 查找⽐某个⽂件新或旧的⽂件 172.1.8 使⽤type选项 172.1.9 使⽤size选项 182.1.10 使⽤depth选项 182.1.11 使⽤mount选项 182.1.12 使⽤cpio选项 182.1.13 使⽤exec或ok来执⾏shell命令 192.1.14 find命令的例⼦ 202.2 xargs 202.3 ⼩结 21第3章后台执⾏命令 223.1 cron和crontab 223.1.1 crontab的域 223.1.2 crontab条⽬举例 233.1.3 crontab命令选项 233.1.4 创建⼀个新的crontab⽂件 243.1.5 列出crontab⽂件 243.1.6 编辑crontab⽂件 243.1.7 删除crontab⽂件 253.1.8 恢复丢失的crontab⽂件 253.2 at命令 253.2.2 列出所提交的作业 273.2.3 清除⼀个作业 273.3 &命令 273.3.1 向后台提交命令 283.3.2 ⽤ps命令查看进程 283.3.3 杀死后台进程 283.4 nohup命令 293.4.1 使⽤nohup命令提交作业 293.4.2 ⼀次提交⼏个作业 293.5 ⼩结 30第4章⽂件名置换 314.1 使⽤* 314.2 使⽤? 324.3 使⽤[...]和[!...] 324.4 ⼩结 33第5章 shell输⼊与输出 345.1 echo 345.2 read 355.3 cat 375.4 管道 385.5 tee 395.6 标准输⼊、输出和错误 405.6.1 标准输⼊ 405.6.2 标准输出 405.6.3 标准错误 405.7 ⽂件重定向 405.7.1 重定向标准输出 415.7.2 重定向标准输⼊ 425.7.3 重定向标准错误 425.8 结合使⽤标准输出和标准错误 43 5.9 合并标准输出和标准错误 435.10 exec 445.11 使⽤⽂件描述符 445.12 ⼩结 45第6章命令执⾏顺序 466.1 使⽤&& 466.2 使⽤|| 466.3 ⽤()和{ }将命令结合在⼀起 47 6.4 ⼩结 48第⼆部分⽂本过滤第7章正则表达式介绍 497.1 使⽤句点匹配单字符 507.2 在⾏⾸以^匹配字符串或字符序列 50 7.3 在⾏尾以$匹配字符串或字符 517.4 使⽤*匹配字符串中的单字符或其重复序列 517.5 使⽤\屏蔽⼀个特殊字符的含义 52 7.6 使⽤[]匹配⼀个范围或集合 527.7 使⽤\{\}匹配模式结果出现的次数 53 7.8 ⼩结 55第8章 grep家族 568.1 grep 578.1.1 双引号引⽤ 578.1.2 grep选项 578.1.3 查询多个⽂件 578.1.4 ⾏匹配 578.1.5 ⾏数 588.1.6 显⽰⾮匹配⾏ 588.1.7 精确匹配 588.1.8 ⼤⼩写敏感 588.2 grep和正则表达式 588.2.1 模式范围 598.2.2 不匹配⾏⾸ 598.2.3 设置⼤⼩写 598.2.4 匹配任意字符 598.2.5 ⽇期查询 598.2.6 范围组合 608.2.8 使⽤grep匹配“与”或者“或”模式 61 8.2.9 空⾏ 618.2.10 匹配特殊字符 618.2.11 查询格式化⽂件名 618.2.12 查询IP地址 618.3 类名 628.4 系统grep命令 628.4.1 ⽬录 638.4.2 passwd⽂件 638.4.3 使⽤ps命令 638.4.4 对⼀个字符串使⽤grep 648.5 egrep 648.6 ⼩结 65第9章 AWK介绍 669.1 调⽤awk 669.2 awk脚本 679.2.1 模式和动作 679.2.2 域和记录 679.2.3 awk中正则表达式及其操作 709.2.4 元字符 709.2.5 条件操作符 709.2.6 awk内置变量 739.2.7 NF、NR和FILENAME 749.2.8 awk操作符 759.2.9 内置的字符串函数 789.2.10 字符串屏蔽序列 809.2.11 awk输出函数printf 819.2.12 printf修饰符 819.2.13 awk数组 869.3 ⼩结 88第10章 sed ⽤法介绍 8910.1 sed怎样读取数据 8910.2 调⽤sed 8910.2.1 保存sed输出 9010.2.2 使⽤sed在⽂件中查询⽂本的⽅式 90 10.2.3 基本sed编辑命令 9010.3 sed和正则表达式 9110.4 基本sed编程举例 9110.4.1 使⽤p(rint)显⽰⾏ 9110.4.2 打印范围 9110.4.3 打印模式 9210.4.4 使⽤模式和⾏号进⾏查询 9210.4.5 匹配元字符 9210.4.6 显⽰整个⽂件 9210.4.7 任意字符 9210.4.8 ⾸⾏ 9210.4.9 最后⼀⾏ 9310.4.10 打印⾏号 9310.4.11 附加⽂本 9310.4.12 创建sed脚本⽂件 9410.4.13 插⼊⽂本 9410.4.14 修改⽂本 9510.4.15 删除⽂本 9610.4.16 替换⽂本 9610.5 使⽤替换修改字符串 9710.6 将sed结果写⼊⽂件命令 9710.7 从⽂件中读⽂本 9810.8 匹配后退出 9810.9 显⽰⽂件中的控制字符 9910.10 使⽤系统sed 9910.10.1 处理控制字符 9910.10.2 处理报⽂输出 10110.10.3 去除⾏⾸数字 10110.10.4 附加⽂本 10210.10.5 从shell向sed传值 10210.10.6 从sed输出中设置shell变量 102 10.11 快速⼀⾏命令 102第11章合并与分割 10411.1 sort⽤法 10411.1.1 概述 10411.1.2 sort选项 10411.1.3 保存输出 10511.1.4 sort启动⽅式 10511.1.5 sort对域的参照⽅式 10511.1.6 ⽂件是否已分类 10511.1.7 基本sort 10611.1.8 sort分类求逆 10611.1.9 按指定域分类 10611.1.10 数值域分类 10611.1.11 唯⼀性分类 10711.1.12 使⽤k的其他sort⽅法 10811.1.13 使⽤k做分类键排序 10811.1.14 指定sort序列 10811.1.15 pos⽤法 10811.1.16 使⽤head和tail将输出分类 109 11.1.17 awk使⽤sort输出结果 10911.1.18 将两个分类⽂件合并 11011.2 系统sort 11011.3 uniq⽤法 11111.4 join⽤法 11211.5 cut⽤法 11411.5.1 使⽤域分隔符 11511.5.2 剪切指定域 11511.6 paste⽤法 11611.6.1 指定列 11611.6.2 使⽤不同的域分隔符 11611.6.3 paste命令管道输⼊ 11711.7 split⽤法 11711.8 ⼩结 118第12章 tr⽤法 11912.1 关于tr 11912.1.1 字符范围 11912.1.2 保存输出 12012.1.3 去除重复出现的字符 12012.1.4 删除空⾏ 12012.1.5 ⼤写到⼩写 12112.1.6 ⼩写到⼤写 12112.1.7 删除指定字符 12112.1.8 转换控制字符 12212.1.9 快速转换 12212.1.10 匹配多于⼀个字符 12312.2 ⼩结 123第三部分登录环境第13章登录环境 12513.1 /etc/profile 12513.2 ⽤户的$HOME.profile 12813.3 stty⽤法 12913.4 创建.logout⽂件 13113.5 ⼩结 131第14章环境和shell变量 13214.1 什么是shell变量 13214.2 本地变量 13214.2.1 显⽰变量 13314.2.2 清除变量 13314.2.3 显⽰所有本地shell变量 133 14.2.4 结合变量值 13414.2.5 测试变量是否已经设置 13414.2.6 使⽤变量来保存系统命令参数 135 14.2.7 设置只读变量 13514.3 环境变量 13614.3.1 设置环境变量 13614.3.2 显⽰环境变量 13614.3.3 清除环境变量 13714.3.4 嵌⼊shell变量 13714.3.6 set命令 14014.3.7 将变量导出到⼦进程 140 14.4 位置变量参数 14114.4.1 在脚本中使⽤位置参数 142 14.4.2 向系统命令传递参数 142 14.4.3 特定变量参数 14314.4.4 最后的退出状态 14414.5 ⼩结 145第15章引号 14615.1 引⽤必要性 14615.2 双引号 14615.3 单引号 14715.4 反引号 14715.5 反斜线 14815.6 ⼩结 149第四部分基础shell编程第16章 shell脚本介绍 15116.1 使⽤shell脚本的原因 15116.2 脚本内容 15116.3 运⾏⼀段脚本 15216.4 ⼩结 153第17章条件测试 15417.1 测试⽂件状态 15417.2 测试时使⽤逻辑操作符 155 17.3 字符串测试 15517.4 测试数值 15617.5 expr⽤法 15717.5.1 增量计数 15817.5.2 数值测试 15817.5.3 模式匹配 15817.6 ⼩结 159第18章控制流结构 16018.1 退出状态 16018.2 控制结构 16018.2.1 流控制 16118.2.2 循环 16118.3 if then else语句 16118.3.1 简单的if语句 16218.3.2 变量值测试 16218.3.3 grep输出检查 16318.3.4 ⽤变量测试grep输出 163 18.3.5 ⽂件拷贝输出检查 16418.3.6 当前⽬录测试 16418.3.7 ⽂件权限测试 16518.3.8 测试传递到脚本中的参数 165 18.3.9 决定脚本是否为交互模式 165 18.3.10 简单的if else语句 16618.3.11 变量设置测试 16618.3.12 检测运⾏脚本的⽤户 166 18.3.13 将脚本参数传⼊系统命令 167 18.3.14 null:命令⽤法 16718.3.15 测试⽬录创建结果 16818.3.16 另⼀个拷贝实例 16918.3.17 多个if语句 16918.3.18 测试和设置环境变量 169 18.3.19 检测最后命令状态 17018.3.20 增加和检测整数值 17118.3.21 简单的安全登录脚本 172 18.3.22 elif⽤法 17318.3.23 使⽤elif进⾏多条件检测 173 18.3.24 多⽂件位置检测 17418.4 case语句 17518.4.1 简单的case语句 17518.4.2 对匹配模式使⽤| 17618.4.3 提⽰键⼊y或n 17718.4.4 case与命令参数传递 177 18.4.5 捕获输⼊并执⾏空命令 17818.5 for循环 18018.5.1 简单的for循环 18118.5.2 打印字符串列表 18118.5.3 对for循环使⽤ls命令 18118.5.4 对for循环使⽤参数 18218.5.5 使⽤for循环连接服务器 18318.5.6 使⽤for循环备份⽂件 18318.5.7 多⽂件转换 18318.5.8 多sed删除操作 18418.5.9 循环计数 18418.5.10 for循环和本地⽂档 18418.5.11 for循环嵌⼊ 18518.6 until循环 18618.6.1 简单的until循环 18618.6.2 监视⽂件 18718.6.3 监视磁盘空间 18718.7 while循环 18818.7.1 简单的while循环 18818.7.2 使⽤while循环读键盘输⼊ 188 18.7.3 ⽤while循环从⽂件中读取数据 189 18.7.4 使⽤IFS读⽂件 18918.7.5 带有测试条件的⽂件处理 190 18.7.6 扫描⽂件⾏来进⾏数⽬统计 191 18.7.7 每次读⼀对记录 19318.7.8 忽略#字符 19318.7.9 处理格式化报表 19418.7.10 while循环和⽂件描述符 196 18.8 使⽤break和continue控制循环 197 18.8.1 break 19718.8.2 跳出case语句 19718.8.3 continue 19718.8.4 浏览⽂件⾏ 19818.9 菜单 19918.10 ⼩结 201第19章 shell函数 20219.1 在脚本中定义函数 20319.2 在脚本中使⽤函数 20319.3 向函数传递参数 20319.4 从调⽤函数中返回 20319.5 函数返回值测试 20419.6 在shell中使⽤函数 20419.7 创建函数⽂件 20419.8 定位⽂件 20519.9 检查载⼊函数 20519.10 执⾏shell函数 20519.10.1 删除shell函数 20619.10.2 编辑shell函数 20619.10.3 函数举例 20719.10.4 将函数集中在⼀起 21919.11 函数调⽤ 21919.11.1 在脚本中调⽤函数 21919.11.2 从函数⽂件中调⽤函数 220 19.12 定位⽂件不只⽤于函数 22219.13 ⼩结 223第20章向脚本传递参数 22420.1 shift命令 22520.1.1 shift命令简单⽤法 22520.1.2 命令⾏输⼊的最后⼀个参数 225 20.1.3 使⽤shift处理⽂件转换 22620.2 getopts 22920.2.1 getopts脚本实例 22920.2.2 getopts使⽤⽅式 23120.2.3 使⽤getopts指定变量取值 231 20.2.4 访问取值⽅式 23220.2.5 使⽤getopts处理⽂件转换 233 20.3 ⼩结 235第21章创建屏幕输出 23621.1.1 字符串输出 23621.1.2 数字输出 23721.1.3 布尔输出 23721.2 tput⽤法 23721.2.1 设置tput命令 23721.2.2 使⽤布尔输出 23721.2.3 在脚本中使⽤tput 23721.2.4 产⽣转义序列 23821.2.5 光标位置 23921.2.6 在屏幕中⼼位置显⽰⽂本 240 21.2.7 查找终端属性 24021.2.8 在脚本中使⽤功能键 24121.2.9 使⽤颜⾊ 24221.2.10 产⽣颜⾊ 24321.2.11 创建精致菜单 24621.3 ⼩结 251第22章创建屏幕输⼊ 25222.1 增加记录 25222.2 删除记录 26222.3 修改记录 26622.4 查看记录 27022.5 ⼩结 273第23章调试脚本 27423.1 ⼀般错误 27423.1.1 循环错误 27423.1.2 典型的漏写引号 27423.1.3 测试错误 27423.1.4 字符⼤⼩写 27523.1.5 for循环 27523.1.6 echo 27523.2 set命令 27523.3 ⼩结 276第24章 shell嵌⼊命令 27724.1 shell嵌⼊命令完整列表 277 24.1.1 pwd 27724.1.2 set 27824.1.3 times 27824.1.4 type 27824.1.5 ulimit 27924.1.6 wait 27924.2 ⼩结 279第五部分⾼级shell编程技巧第25章深⼊讨论<< 28125.1 快速创建⼀个⽂件 28125.2 快速创建打印⽂档 28125.3 ⾃动选择菜单 28225.4 ⾃动ftp传输 28325.5 访问数据库 28625.6 ⼩结 288第26章 shell ⼯具 28926.1 创建保存信息的⽂件 28926.1.1 使⽤date命令创建⽇志⽂件 289 26.1.2 创建唯⼀的临时⽂件 29026.2 信号 29126.2.1 杀死⼀个进程 29226.2.2 检测信号 29326.3 trap 29426.3.1 捕获信号并采取相应的⾏动 294 26.3.2 捕获信号并采取⾏动的另⼀个例⼦ 29526.3.3 锁住终端 29726.3.4 忽略信号 29826.4 eval 30026.4.1 执⾏含有字符串的命令 300 26.4.2 给每个值⼀个变量名 30126.5 logger命令 30226.5.1 使⽤logger命令 30326.6 ⼩结 305第27章⼏个脚本例⼦ 30627.1 pingall 30627.2 backup_gen 30627.3 del.lines 31227.4 access.deny 31327.5 logroll 31627.6 nfsdown 31727.7 ⼩结 317第28章运⾏级别脚本 31828.1 怎么知道系统中是否含有运⾏级别⽬录 31828.2 确定当前的运⾏级别 31928.3 快速熟悉inittab 31928.4 运⾏级别 32028.4.1 各种运⾏级别 32128.4.2 运⾏级别脚本的格式 321 28.4.3 安装运⾏级别脚本 32228.5 使⽤inittab来启动应⽤程序 323 28.6 启动和停⽌服务的其他⽅法 324 28.7 ⼩结 324第29章 cgi脚本 32529.1 什么是Web页⾯? 32529.2 cgi 32529.3 连接Web服务器 32629.4 cgi和HTM脚本 32629.4.1 基本cgi脚本 32629.4.2 显⽰shell命令输出 32829.4.3 使⽤SSI 33029.4.4 访问计数器 33029.4.5 使⽤⼀个链接来显⽰当前Web 环境变量 33229.4.6 其他常⽤的环境变量 334 29.5 get和post⽅法简介 33529.5.1 get⽅法 33529.5.2 post⽅法 34029.5.3 填充列表项 34729.5.4 ⾃动刷新页⾯ 34829.6 ⼩结 349附录常⽤shell命令 350。

Linux_基础教程--Shell脚本编程

Linux_基础教程--Shell脚本编程
17

学习各种管理和监视命令的使用


学习各种文本文件工具的使用

2014年12月24日
变量和表达式
2014年12月24日
18
Shell 变量操作

变量替换扩展


输入

变量测试 变量的字符串操作 变量的间接引用 $[expression] $((expression)) expr let declare -i

Shell 脚本的执行

PATH 环境变量的默认值不包含当前目录, 若脚本文件在当前目录,应使用 ./script-file
PATH 环境变量的默认值包含 ~/bin 目录, 用户可以将自己的脚本文件存放在 ~/bin 目录, 之后即可直接调用脚本文件名执行脚本了

2014年12月24日
7
Shell 脚本的编码规范
${var/%old/new}
用new替换${var}中结尾部分与old匹配的部分
注: (1)old 中可以使用 通配符。 (2)var 可以是 @ 或 *,表示对每个位置参数进行替换
sh –n 脚本名
对脚本进行语法检查,但不执行脚本。如果存在语法错误,shell 会报错,如果没有错误,则不显示任何内容。
2014年12月24日
12
脚本调试举例 1

对脚本进行语法检查
$ bash -n greetings.sh

显示脚本中每个原始命令行及其执行结果
$ bash -v greetings.sh
2014年12月24日 22
字符串变量替换扩展举例1
str='I love linux. I love UNIX too.‟

Linux之19——Shell编程基础详解

Linux之19——Shell编程基础详解

Linux之19——Shell编程基础详解第⼀部分:Linux Shell 简介Shell 是⼀个⽤ C 语⾔编写的程序,它是⽤户使⽤ Linux 的桥梁。

Shell 既是⼀种命令语⾔,⼜是⼀种程序设计语⾔。

Shell 是指⼀种应⽤程序,这个应⽤程序提供了⼀个界⾯,⽤户通过这个界⾯访问操作系统内核的服务。

Ken Thompson 的 sh 是第⼀种 Unix Shell,Windows Explorer 是⼀个典型的图形界⾯ Shell。

当⼀个⽤户登陆linux 系统后,系统就会为该⽤户创建⼀个shell程序。

Shell的版本:Bourne Shell:是贝尔实验室开发的,unix普遍使⽤的shell,在编程⽅⾯⽐较优秀,但在⽤户交互⽅⾯没有其他shell优秀。

BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,在bourne shell基础上增强了很多特性,如命令补全,命令历史表等等Korn Shell:是对Bourne Shell 的发展,在⼤部分内容上与Bourne Shell兼容,集成了C Shell和Bourne shell优点。

C Shell:是SUN公司Shell的BSD版本,语法与c语⾔相似,⽐bourne shell 更适合编程第⼆部分 shell 程序设计基础2.1 shell输⼊输出2.1.1 echoecho命令可以显⽰⽂本⾏或变量取值,或者把字符串输⼊到⽂件中格式: echo stringecho的常⽤功能:\c 不换⾏ \f 不进纸 \t 跳格 \n 换⾏note:对于linux系统,必须使⽤-e选项来使以上转义符⽣效例:$ echo -e "hello\tboy"hello boyecho命令对特殊字符敏感,如果要输出特殊字符,需要⽤\屏蔽其特殊含义。

常⽤的特殊字符:双引号"" 反引号`` 反斜线\例:$ echo "\"\"" //想输出""""2.1.2 readread命令从键盘或者⽂件的某⼀⾏⽂本中读⼊信息,并将其赋给⼀个变量。

Shell脚本-从入门到精通

Shell脚本-从入门到精通
if 语句可以嵌套使用
ex4if.sh,chkperm.sh,chkperm2.sh, name_grep,tellme,tellme2,idcheck.sh
第22页,共74页。
ex4if.sh
#!/bin/bash # scriptname: ex4if.sh
# echo -n "Please input x,y: "
echo echo –e "Hello $LOGNAME, \c"
echo "it's nice talking to you." echo "Your present working directory is:" pwd # Show the name of present directory
echo
then
# 那么
commands1 # 执行语句块 commands1
elif expr2 # 若expr1 不真,而expr2 为真
then
# 那么
commands2 # 执行语句块 commands2
... ...
# 可以有多个 elif 语句
else
# else 最多只能有一个
commands4 # 执行语句块 commands4
\t 插入tab; \v 与\f相同; \\ 插入\字符; \nnn 插入nnn(八进制)所代表的ASCII字符; --help 显示帮助
--version 显示版本信息
第8页,共74页。
Shell 脚本举例
#!/bin/bash
# This script is to test the usage of read # Scriptname: ex4read.sh echo "=== examples for testing read ===" echo -e "What is your name? \c" read name echo "Hello $name" echo echo -n "Where do you work? "

shell脚本基础(又长又详细)

shell脚本基础(又长又详细)

shell脚本基础(⼜长⼜详细)第⼗⼀章 BASH脚本(⼀)常见的Shell变量的类型包括环境变量、预定义变量、位置变量、⽤户⾃定义变量。

本节将分别学习这四种Shell变量的使⽤。

11. 1、 Shell的环境变量通过set命令可以查看系统中所有Shell变量(包括环境变量和⽤户⾃定义变量),由于内容输出较多,建议使⽤less命令分页查看。

常⽤环境变量:PATH 决定了shell将到哪些⽬录中寻找命令或程序HOME 当前⽤户主⽬录HISTSIZE 历史记录数LOGNAME 当前⽤户的登录名USER 当前⽤户名UID 当前⽤名的UIDHOSTNAME 指主机的名称SHELL 前⽤户Shell类型LANGUGE 语⾔相关的环境变量,多语⾔可以修改此环境变量MAIL 当前⽤户的邮件存放⽬录PS1 基本提⽰符,对于root⽤户是#,对于普通⽤户是$PS2 附属提⽰符,默认是“>”例:以分号分隔,显⽰当前的⽤户的⽤户名、宿主⽬录、登录Shell。

例:查看当前命令的搜索路径,并将/opt/bin⽬录添加到现有搜索路径中去,从⽽可以直接执⾏此⽬录中的命令。

环境变量的配置⽂件⽤户可在当前的Shell环境中直接为环境变量赋值,但需要长期变更所使⽤的某个环境变量时,可以修改配置⽂件。

在Linux系统中,⽤户环境变量的设置⼯作习惯上在 /etc/profile ⽂件及宿主⽬录中 .bash_profile⽂件中进⾏,前者称为全局配置⽂件(对所有⽤户起作⽤),后者称为⽤户配置⽂件(允许覆盖全局配置)。

例:在当前⽤户环境中,将⽤于限制历史命令的环境变量HISTSIZE的值改为100。

例:编辑“~/.bash_profile”⽂件,修改PATH的设置,以便⽤户在下次登录后能够使⽤服务/opt/bin ⽬录作为默认的搜索路径。

# vi /root/.bash_profielPATH=$PATH:$HOME/bin:/opt/binExport PATH11.2 Shell位置变量为了在使⽤Linux程序时,⽅便通过命令⾏给程序提供操作参数,Bash引⼊了位置变量的概念。

linux基本shell语法

linux基本shell语法

linux基本shell语法1. 执行命令:输入命令后按下回车键即可执行。

2. 变量赋值:使用等号(=)将值赋给变量,例如:`variable_name=value`3. 输出变量:使用`echo`命令输出变量的值,例如:`echo variable_name`4. 注释:使用井号(#)来添加注释,注释会被解释器忽略。

5. 重定向输入输出:使用重定向符号来将命令的输入输出重定向到文件中,例如:`command > output_file` (将命令的输出重定向到文件)或 `command < input_file` (将文件内容作为命令的输入)6. 管道:使用竖线(|)将前一个命令的输出作为后一个命令的输入,例如:`command1 | command2` (将command1的输出作为command2的输入)7. 执行前一个命令的退出状态码:使用美元符号和问号(?)获取前一个命令的退出状态码(0表示命令成功执行),例如:`echo ?`8. 条件判断:使用`if`语句进行条件判断,例如:```if conditionthencommand1elsecommand2fi```9. 循环:使用`for`和`while`循环进行迭代操作,例如:```for item in listdocommanddone``````while conditiondocommanddone```10. 函数定义和调用:使用`function`关键字定义函数,例如:```function function_name {command1command2return value}``````function_name```以上是一些基本的Linux shell语法,还有更多高级用法可以进一步学习和探索。

shell脚本教程详细讲解

shell脚本教程详细讲解
由于vi的版本不同,其命令格式、功能和用法会有一 些差别。Shell中执行vi命令,RedHat系统实际上是执 行vim,它是传统vi的增强版本
1、VI的三种工作模式
命令模式
启辑动,V只I能默接认受进命入令命令(键模入式的。命此令时看界不面到不)能编 文件的保存,退出,文本的删除、复制、搜
内部变量 由系统提供的。与环境变量不同,但用户不能 修改它们。
本地变量和环境变量的对比
1、本地变量(局部变量、用户变量)
本地变量 在用户现在的shell生命期的脚本中使用 变量名=值
:#,# s /SEARCH /REPLACE /g
#号表示数字,表示从多少行到多少行,把 SEARCH替换成REPLACE;
:s /SEARCH /REPLACE /g
把当前光标所在行中的SEARCH单词,替换 成REPLACE,并把所有SEARCH高亮显示
7、设置vi
全局的配置文件位于/etc/vim/vimrc(或者/etc/vimrc) 也可以拥有自己独立的配置文件,配置文件位
双引号内; 7. 先执行 1G 或 gg 后,直接输入 /bzip2 8. 直接执行 :50,100s/man/MAN/gc 即可 9. (1)简单的方法可以一直按 u 恢复到原始状态,(2)使用不
储存离开 :q! 之后,再重新读取一次该文件; 10. 51G 然后再 10yy 之后按下 G 到最后一行,再p粘贴10
本(包括当前行)
u:恢复刚才被修改的文本 U:恢复光标所在行的所有修改 .:重复上一次命令的操作
命令模式下的操作:文本复制、粘贴
复制命令:y
yy: 复制整行 yw:复制光标所在的单词 nyw:复制包括光标所在的n个单词 nyy:复制包括当前行在内的n行

Linux Bash Shell入门教程

Linux Bash Shell入门教程

BASH 的基本语法∙最简单的例子—— Hello World!∙关于输入、输出和错误输出∙BASH 中对变量的规定(与 C 语言的异同)∙BASH 中的基本流程控制语法∙函数的使用2.1 最简单的例子—— Hello World!几乎所有的讲解编程的书给读者的第一个例子都是 Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解 BASH。

用 vi 编辑器编辑一个 hello 文件如下:#!/bin/bash# This is a very simple exampleecho Hello World这样最简单的一个 BASH 程序就编写完了。

这里有几个问题需要说明一下:一,第一行的 #! 是什么意思二,第一行的 /bin/bash 又是什么意思三,第二行是注释吗四,echo 语句五,如何执行该程序#! 是说明 hello 这个文件的类型的,有点类似于 Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。

Linux 系统根据 "#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过 "man magic"命令及 /usr/share/magic 文件来了解这方面的更多内容。

在 BASH 中第一行的 "#!" 及后面的 "/bin/bash" 就表明该文件是一个 BASH 程序,需要由 /bin 目录下的 bash 程序来解释执行。

BASH 这个程序一般是存放在 /bin 目录下,如果你的 Linux 系统比较特别,bash 也有可能被存放在 /sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或 /usr/local/sbin 这样的目录下;如果还找不到,你可以用 "locate bash" "find / -name bash 2> /dev/null" 或 "whereis bash" 这三个命令找出 bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个 BASH 软件包了。

shell-快速入门_批处理脚本编程语言

shell-快速入门_批处理脚本编程语言

shell-快速⼊门_批处理脚本编程语⾔1. Shell概述1.1. Shell是什么Shell是⼀门批处理脚本编程语⾔。

批处理是什么?操作系统都分为(GUI)图形界⾯,命令界⾯(command)。

命令操作的可以不⽤⼀⼀条执⾏。

可以组命令同时执⾏。

我们将多条命令同时执⾏的操作称为批处理。

什么是脚本编程语⾔。

脚本语⾔是不需要就可以执⾏的编程语⾔。

《解释型编程语⾔》特征,任何的脚本语⾔是必须有宿主程序的。

--JavaScript脚本语⾔。

必须需要依赖浏览器才可以执⾏。

所以浏览器就是JavaScript的宿主程序。

--SQL脚本语⾔,必须需要数据库启动了才可以执⾏,SQL语⾔的宿主是数据库--Shell脚本语⾔,必须依赖linux的系统。

linux系统就是它宿主程序。

shell脚本,是批处理的程序,所以也可以使⽤任何的linux命令shell脚本,是⼀门脚本语⾔,所以它不需要编译直接执⾏shell脚本是⼀门编程语⾔,必须符合编写语⾔的特征。

变量,常量,标识符,注释,判断,循环1.2. 语法结构问题:linux是有多种shell的语⾔的。

如,bash shell csh 等。

为什么有多种?答:原因是linux是⼀个开源的操作系统。

不同的⼈都可以对它进⾏制定。

功能稳定后可以提交合并到主核中。

#!/bin/bash ##指定使⽤的shell是bash shell##输出hello worldecho “hello world”##这是⼀⾏注释bash shell的注释是使⽤#,但我们建议使⽤##号。

需求:使⽤root,在~⽬录的shell⽂件⾥⾯,创建⼀个 demo.sh 的shell脚本。

输出hello world2. 变量2.1. 系统变量变量分为系统变量与⽤户⾃定义变量。

所谓的系统变量就Linux系统⾃带的变量。

如:$PWD,$USER这种Linux系统⾃带的变量,我们称为系统变量。

以及我们在profile设置的变量。

Bash脚本编程入门指南

Bash脚本编程入门指南

Bash脚本编程入门指南第一章:介绍Bash脚本编程Bash脚本编程是一种广泛应用于Linux和Unix系统中的命令行脚本语言。

它提供了一种编写可以自动化任务和批处理操作的方式。

本章将介绍Bash脚本编程的基本概念和用途,以及必要的准备工作。

Bash是什么?Bash(Bourne Again Shell)是一种Unix Shell和命令语言,它是许多Unix系统中默认的Shell。

它被设计为与Bourne Shell兼容,并增加了一些额外的功能。

为什么使用Bash脚本编程?Bash脚本编程可以大大提高生产效率,尤其是对于繁琐重复的任务。

通过编写Bash脚本,我们可以将一系列命令和操作组织在一起,以便快速自动化执行。

第二章:入门准备在开始编写Bash脚本之前,我们需要进行一些准备工作。

本章将介绍如何安装Bash,以及Bash脚本编程的基本工具和环境设置。

安装BashBash通常是Linux和Unix系统的默认Shell,因此无需额外安装。

但如果你使用的是其他操作系统(如Windows),可以通过安装Cygwin或通过Linux虚拟机来获取Bash。

编写和执行脚本在Bash脚本编程中,我们使用文本编辑器来编写脚本文件。

文件的扩展名通常是.sh。

编写完脚本后,我们可以通过在终端中执行脚本来运行它。

第三章:基本语法和结构Bash脚本采用了一种类似于其他编程语言的结构和语法。

本章将介绍Bash脚本的基本语法、变量、操作符、条件语句和循环语句等。

变量在Bash脚本中,可以使用变量来存储和操作数据。

变量的命名规则与其他编程语言类似,以字母或下划线开头,不能以数字开头。

变量赋值使用等号,但等号两边不能有空格。

操作符Bash脚本支持各种数学和逻辑运算符,如加减乘除、比较运算符和逻辑运算符等。

这些运算符可以用于计算和判断。

条件语句条件语句用于根据条件的真假来执行不同的操作。

Bash脚本支持if-else、case等条件语句,可以根据不同的条件执行相应的代码块。

Linux之基础bashshell命令

Linux之基础bashshell命令

Linux之基础bashshell命令linux系统构成linux内核主要负责系统内存管理软件程序管理硬件设备管理⽂件系统管理GNU⼯具执⾏⼀些标准功能,⽐如控制⽂件和程序。

⼜分为核⼼⼯具和shell.⼤部分Linux发⾏版的默认shell都是GNU bash shell.浏览⽂件⽬录常见的linux⽬录名称:虚拟的根⽬录:/ ⼆进制⽬录:/bin root⽤户的主⽬录: /root …等等遍历⽬录:cd destination 后⾯的参数可以使⽤绝对⽂件路径,也可以使⽤相对⽂件路径绝对路径输⼊输⼊: ~$ cd /usr/bin结果:/usr/bin$:~符号⽤来追踪当前所在的虚拟⽬录结构中的位置,表⽰shell会话位于你的主⽬录中。

pwd命令可以显⽰出shell会话的当前⽬录,这个⽬录被称为当前⼯作⽬录。

纯cd命令可以从任何⼀级跳回主⽬录相对路径输⼊假如你位于home⽬录,希望切换到⼦⽬录document,可以直接使⽤1: cd doc~/doc$两个特殊字符单点符(.),表⽰当前⽬录双点符(..),表⽰当前的⽗⽬录⽐如你现在处于主⽬录下的doc⽬录,想要切换到主⽬录的dow下,可以这样做:1: cd ../dow也可以在其他切换中加多个双点符⽐如1: cd ../../etc⽂件和⽬录列表ls命令显⽰当前⽬录下的⽂件和⽬录,可以⽤-F参数命令轻松区分⽂件和⽬录,-a显⽰隐藏⽂件(前⾯带点的),-R列出当前⽬录下包含的⼦⽬录中的⽂件。

这些参数可以叠加,⽐如 ls -alF-l参数产⽣长列表格式的输出。

按照顺序显⽰:⽂件类型,权限,硬链接总数,属主的⽤户名,组的组名,⼤⼩(单位字节),上次的修改时间,⽂件名和⽬录过滤输出列表只会显⽰该⽂件的信息,⽂件名放在所有参数后⾯。

1: $ls –l my_script代表⼀个任意的字符,*代表0个或多个1: $ls –l my_scr?pt2: $ls –l my*3: $ls –l my_s*t[ai]代表a或者i,[a-i]字母范围a-i,[!a]排除a创建⽂件1: touch filename2: touch dir/filenametouch命令创建⼀个空⽂件,并将你的⽤户名作为⽂件的属主。

linux的基本操作(编写shell脚本)

linux的基本操作(编写shell脚本)

linux的基本操作(编写shell脚本)终于到shell 脚本这章了,在以前笔者卖了好多关⼦说shell脚本怎么怎么重要,确实shell脚本在linux系统管理员的运维⼯作中⾮常⾮常重要。

下⾯笔者就带你正式进⼊shell脚本的世界吧。

到现在为⽌,你明⽩什么是shell脚本吗?如果明⽩最好了,不明⽩也没有关系,相信随着学习的深⼊你就会越来越了解到底什么是shell脚本。

⾸先它是⼀个脚本,并不能作为正式的编程语⾔。

因为是跑在linux的shell中,所以叫shell脚本。

说⽩了,shell脚本就是⼀些命令的集合。

举个例⼦,我想实现这样的操作:1)进⼊到/tmp/⽬录;2)列出当前⽬录中所有的⽂件名;3)把所有当前的⽂件拷贝到/root/⽬录下;4)删除当前⽬录下所有的⽂件。

简单的4步在shell窗⼝中需要你敲4次命令,按4次回车。

这样是不是很⿇烦?当然这4步操作⾮常简单,如果是更加复杂的命令设置需要⼏⼗次操作呢?那样的话⼀次⼀次敲键盘会很⿇烦。

所以不妨把所有的操作都记录到⼀个⽂档中,然后去调⽤⽂档中的命令,这样⼀步操作就可以完成。

其实这个⽂档呢就是shell脚本了,只是这个shell脚本有它特殊的格式。

Shell脚本能帮助我们很⽅便的去管理服务器,因为我们可以指定⼀个任务计划定时去执⾏某⼀个shell脚本实现我们想要需求。

这对于linux 系统管理员来说是⼀件⾮常值得⾃豪的事情。

现在的139邮箱很好⽤,发邮件的同时还可以发⼀条邮件通知的短信给⽤户,利⽤这点,我们就可以在我们的linux服务器上部署监控的shell脚本,⽐如⽹卡流量有异常了或者服务器web服务器停⽌了就可以发⼀封邮件给管理员,同时发送给管理员⼀个报警短信这样可以让我们及时的知道服务器出问题了。

有⼀个问题需要约定⼀下,凡是⾃定义的脚本建议放到/usr/local/sbin/⽬录下,这样做的⽬的是,⼀来可以更好的管理⽂档;⼆来以后接管你的管理员都知道⾃定义脚本放在哪⾥,⽅便维护。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

BASH 的基本语法最简单的例子——Hello World!关于输入、输出和错误输出BASH 中对变量的规定(与C 语言的异同)BASH 中的基本流程控制语法函数的使用2.1 最简单的例子——Hello World!几乎所有的讲解编程的书给读者的第一个例子都是Hello World 程序,那么我们今天也就从这个例子出发,来逐步了解BASH。

用vi 编辑器编辑一个hello 文件如下:#!/bin/bash# This is a very simple exampleecho Hello World这样最简单的一个BASH 程序就编写完了。

这里有几个问题需要说明一下:一,第一行的#! 是什么意思二,第一行的/bin/bash 又是什么意思三,第二行是注释吗四,echo 语句五,如何执行该程序#! 是说明hello 这个文件的类型的,有点类似于Windows 系统下用不同文件后缀来表示不同文件类型的意思(但不相同)。

Linux 系统根据"#!" 及该字串后面的信息确定该文件的类型,关于这一问题同学们回去以后可以通过"man magic"命令及/usr/share/magic 文件来了解这方面的更多内容。

在BASH 中第一行的"#!" 及后面的"/bin/bash" 就表明该文件是一个BASH 程序,需要由/bin 目录下的bash 程序来解释执行。

BASH 这个程序一般是存放在/bin 目录下,如果你的Linux 系统比较特别,bash 也有可能被存放在/sbin 、/usr/local/bin 、/usr/bin 、/usr/sbin 或/usr/local/sbin 这样的目录下;如果还找不到,你可以用"locate bash" "find / -name bash 2> /dev/null" 或"whereis bash" 这三个命令找出bash 所在的位置;如果仍然找不到,那你可能需要自己动手安装一个BASH 软件包了。

第二行的"# This is a ..." 就是BASH 程序的注释,在BASH 程序中从“#”号(注意:后面紧接着是“!”号的除外)开始到行尾的多有部分均被看作是程序的注释。

的三行的echo 语句的功能是把echo 后面的字符串输出到标准输出中去。

由于echo 后跟的是"Hello World" 这个字符串,因此"Hello World"这个字串就被显示在控制台终端的屏幕上了。

需要注意的是BASH 中的绝大多数语句结尾处都没有分号。

如何执行该程序呢?有两种方法:一种是显式制定BASH 去执行:$ bash hello 或$ sh hello (这里sh 是指向bash 的一个链接,“lrwxrwxrwx 1 root root 4 Aug 20 05:41 /bin/sh -> bash”)或者可以先将hello 文件改为可以执行的文件,然后直接运行它,此时由于hello 文件第一行的"#! /bin/bash" 的作用,系统会自动用/bin/bash 程序去解释执行hello 文件的:$ chmod u+x hello$ ./hello此处没有直接“$ hello”是因为当前目录不是当前用户可执行文件的默认目录,而将当前目录“.”设为默认目录是一个不安全的设置。

需要注意的是,BASH 程序被执行后,实际上Linux 系统是另外开设了一个进程来运行的。

2.2 关于输入、输出和错误输出在字符终端环境中,标准输入/标准输出的概念很好理解。

输入即指对一个应用程序或命令的输入,无论是从键盘输入还是从别的文件输入;输出即指应用程序或命令产生的一些信息;与Windows 系统下不同的是,Linux 系统下还有一个标准错误输出的概念,这个概念主要是为程序调试和系统维护目的而设置的,错误输出于标准输出分开可以让一些高级的错误信息不干扰正常的输出信息,从而方便一般用户的使用。

在Linux 系统中:标准输入(stdin)默认为键盘输入;标准输出(stdout)默认为屏幕输出;标准错误输出(stderr)默认也是输出到屏幕(上面的std 表示standard)。

在BASH 中使用这些概念时一般将标准输出表示为1,将标准错误输出表示为2。

下面我们举例来说明如何使用他们,特别是标准输出和标准错误输出。

输入、输出及标准错误输出主要用于I/O 的重定向,就是说需要改变他们的默认设置。

先看这个例子:$ ls > ls_result$ ls -l >> ls_result上面这两个命令分别将ls 命令的结果输出重定向到ls_result 文件中和追加到ls_result 文件中,而不是输出到屏幕上。

">"就是输出(标准输出和标准错误输出)重定向的代表符号,连续两个">" 符号,即">>" 则表示不清除原来的而追加输出。

下面再来看一个稍微复杂的例子:$ find /home -name lost* 2> err_result这个命令在">" 符号之前多了一个"2","2>" 表示将标准错误输出重定向。

由于/home 目录下有些目录由于权限限制不能访问,因此会产生一些标准错误输出被存放在err_result 文件中。

大家可以设想一下find /home -name lost* 2>>err_result 命令会产生什么结果?如果直接执行find /home -name lost* > all_result ,其结果是只有标准输出被存入all_result 文件中,要想让标准错误输出和标准输入一样都被存入到文件中,那该怎么办呢?看下面这个例子:$ find /home -name lost* > all_result 2>& 1上面这个例子中将首先将标准错误输出也重定向到标准输出中,再将标准输出重定向到all_result 这个文件中。

这样我们就可以将所有的输出都存储到文件中了。

为实现上述功能,还有一种简便的写法如下:$ find /home -name lost* >& all_result如果那些出错信息并不重要,下面这个命令可以让你避开众多无用出错信息的干扰:$ find /home -name lost* 2> /dev/null同学们回去后还可以再试验一下如下几种重定向方式,看看会出什么结果,为什么?$ find /home -name lost* > all_result 1>& 2$ find /home -name lost* 2> all_result 1>& 2$ find /home -name lost* 2>& 1 > all_result另外一个非常有用的重定向操作符是"-",请看下面这个例子:$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)该命令表示把/source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到/dest/directory 目录下去,这个命令在/source/directory 和/dest/directory 不处在同一个文件系统下时将显示出特别的优势。

下面还几种不常见的用法:n<&- 表示将n 号输入关闭<&- 表示关闭标准输入(键盘)n>&- 表示将n 号输出关闭>&- 表示将标准输出关闭2.3 BASH 中对变量的规定(与C 语言的异同)好了下面我们进入正题,先看看BASH 中的变量是如何定义和使用的。

对于熟悉C 语言的程序员,我们将解释BASH 中的定义和用法与C 语言中有何不同。

2.3.1. BASH 中的变量介绍我们先来从整体上把握一下BASH 中变量的用法,然后再去分析BASH 中变量使用与C 语言中的不同。

BASH 中的变量都是不能含有保留字,不能含有"-" 等保留字符,也不能含有空格。

2.3.1.1 简单变量在BASH 中变量定义是不需要的,没有"int i" 这样的定义过程。

如果想用一个变量,只要他没有在前面被定义过,就直接可以用,当然你使用该变量的第一条语句应该是对他赋初值了,如果你不赋初值也没关系,只不过该变量是空(注意:是NULL,不是0 )。

不给变量赋初值虽然语法上不反对,但不是一个好的编程习惯。

好了我们看看下面的例子:首先用vi 编辑下面这个文件hello2:#!/bin/bash# give the initialize value to STRSTR="Hello World"echo $STR在上面这个程序中我们需要注意下面几点:一,变量赋值时,'='左右两边都不能有空格;二,BASH 中的语句结尾不需要分号(";");三,除了在变量赋值和在FOR循环语句头中,BASH 中的变量使用必须在变量前加"$"符号,同学们可以将上面程序中第三行改为"echo STR" 再试试,看看会出什么结果。

==>output: STR四,由于BASH 程序是在一个新的进程中运行的,所以该程序中的变量定义和赋值不会改变其他进程或原始Shell 中同名变量的值,也不会影响他们的运行。

更细致的文档甚至提到以但引号括起来的变量将不被BASH 解释为变量,如'$STR' ,而被看成为纯粹的字符串。

而且更为标准的变量引用方式是${STR} 这样的,$STR 自不过是对${STR} 的一种简化。

在复杂情况下(即有可能产生歧义的地方)最好用带{} 的表示方式。

BASH 中的变量既然不需要定义,也就没有类型一说,一个变量即可以被定义为一个字符串,也可以被再定义为整数。

如果对该变量进行整数运算,他就被解释为整数;如果对他进行字符串操作,他就被看作为一个字符串。

请看下面的例子:#!/bin/bashx=1999let "x = $x + 1"echo $xx="olympic'"$xecho $x关于整数变量计算,有如下几种:" + - * / % ",他们的意思和字面意思相同。

相关文档
最新文档