Shell程序设计教程

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

三种方式
a b
Shell:
source aliace aliace
hatter
gryphon
Shell: 子Shell:
hatter aliace & hatter
gryphon
c
Shell: 子Shell:
gryphon
程序的返回值
• echo $? • 0表示程序运行成功 • 其他值表示程序运行失败
EMACS边界模式 打开调试选项
变量和引用
• wonderland=alice 定义变Байду номын сангаас • unset wonderland 删除变量 • echo The value of \$wonderland is \"$wonderland\". • echo "The value of \$wonderland is \"$wonderland\"."
环境变量
• 对所有子进程均可见的变量即为环境变量。 • HOME MAIL PATH PWD TERM均为环境 变量。 • export/declare -x查看环境变量。
整型变量(1)
• • • • $ val1=12 val2=5 $ result1=val1*val2 $ echo $result1 val1*val2
• unset names[100]; unset names
@*#
• • echo %{names[*]} 使用*将引用扩展到由被IFS变量第一个字符分隔的数组中所有取值组成的一 个单词中 for i in "${names[@]}"; do echo $i done 使用@将数组扩展成第一个字符分隔的数组中的所有取值组成的一个单词。 names=(hatter [5]=duchess alice) ${#names[5]} 取值是7 ${#names[@]}取值是3
Shell历史
• 第一个主要的shell是bourne shell(以其发 明者steven bourne命名),它包含在Unix 第一个流行版本版本7中,始于1979年。 Bourne shell在系统上称为sh。
Shell历史
• 第一个广泛流行的可替代产品是C shell。它由 California大学Berkeley分校的Bill joy编写,版 本7出台两年后在Unix的Berkeley软件发布 (BSD)版本出现,并被包含在大多数当前Unix 版本中。 • C shell的名称来源于其命令语句与C程序语言的 相似。它支持许多原来BSD Unix所独有但现在已 经被其他大多数Unix版本所支持的操作系统特性 (如作业控制)。
大括号扩展
• 一个可选的前缀,后跟大括号内用逗号分隔 的字符串。
b{ed, olt, ar}s b{ar{d,n,k},ed}s
beds、bolts、bars bards、barns、barks、beds
强引用
• $ echo 2 * 3 > 5 is a valid inequality. • 生成一个新文件,名字为5,它包含”2“,当前 目录下所有文件的名称,以及字符串3 is a valid inquality. • echo '2 * 3 > 5 is a valid inquality.' • echo '2 * 3 > 5' is a valid inquality.
• 上述示例的结果都为:The value of $wanderland is "alice". 但使用双引号更正确。
变量和引用
• $fred=‘Four spaces between these • echo $fred,结果为 • Four spaces between these words • echo "$fred",结果为 • Four spaces between these words'
反斜线转义
• $ echo 2 \* 3 \> 5 is a valid inequality. • $ echo \" 2 \* 3 \> 5 \" is a valid inequality.
• $ echo 'Hatter ' \ ' ' s tea party' • $ echp Hatter \ ' s tea party • $ echp "Hatter's tea party"
read
• read是传统shell编程思想的“应急出口”。 • 传统shell编程思想指出最重要的数据处理 单位是文件;read命令则暗指按行进行处 理。
内置变量
HOME SECONDS SHELL PWD OLDPWD PATH PS1 PS2 主目录名 调用shell的秒数 shell实例的路径名 当前目录 最后一个cd命令前的目录 搜索路径 一级提示符 二级提示符
words
read
• read var1 var2 • 该语句从标准输入接受一行,将其分开形成单词,单词间 用IFS的值中的任意字符分隔。单词将会被赋值到var1 var2 var3中。 • • • • • • $ read ch1 ch2 alice duchess $ echo $ch1 alice $ echo $ch2 duchess
第一个shell脚本
• • • • #/bin/bash # This is test.sh echo hello world echo This is second line.
• $ chmod +x test.sh • $ ./test.sh • $ export PAHT=$PATH:. • $ test.sh
运行shell脚本
• 假设有一个简单的shell脚本alice,它包含 了命令hatter和gryphon。
• $ source alice-- 在当前shell内执行 • $ alice -- 运行子shell,在子shell内执行 • $ alice & -- -- 运行子shell,在子shell内 执行
通配符
通配符 ? 匹配 任意单个字符
*
[set] [!set]
任意字符字符串
set中任意字符 不在set中的任意字符
?通配符
• ls program.? • 如果目录中包含program.c、program.log、 program.o,那么表达式program.?匹配 program.c和program.o,但不匹配 program.log
Shell程序设计
张小平
本质
• Shell程序设计的本质是将各种Unix命令组 合使用,同时结合shell提供的语法功能, 以完成某项特定的任务。 • 针对某项任务,一旦编写了Shell脚本并保 存下来,以后需要再次执行该任务时,只 需简单的运行脚本即可。
进入和退出
• 通过键入bash/ksh/csh/sh进入Shell。 • 通过键入exit、logout或按Ctrl - D退出。
算术条件
• 使用((...))执行算术测试,关系操作符同往前第二 张中的表格所示。 • 也可以使用[ ]执行算术测试。
操作符 -lt -le -eq 含义 小于 小于等于 等于 -gt -ge -ne 大于 大于等于 不等于
数组
• names[0]=hatter • names[1]=duchess • names[2]=alice • names=(hatter duchess alice) • names=([2]=alice [0]=hatter [1]=duchess) • names=(hatter [5]=duchess alice) • • • • declare -ar names ${array[i]} echo ${names[5]} echo ${names}
表达式 [abc] [.,;] [-_] [a-c] [a-z] [!0-9] [0-9!] [\!0-9] [a-zA-Z] [a-zA-Z0-9_-] 匹配 a、b或c 句号、逗号或分号 短划线或下划线 a、b或c 所有小写字母 所有非数字 所有数字和惊叹号 所有小写和大写字母 所有字母、数字、下划线和短划线
定制用户环境
• 默认系统配置文件/etc/profile
• 登录Shell读取用户主目录下 的.bash_profile .bash_login .profile并执行
• 修改后重新登陆生效或者source .bash_profile • 在命令行上键入bash启动一个新shell则读取.bashrc中的 命令。 • Bourne shell 和 Korn shell使用.profile;C shell使 用.login
*通配符
表达式 fr* *ed b* *e* *r* * 结果 frank fred ed fred bob darlence dave ed fred darlene frank fred bob darlene dave ed frank fred
d*e
g*
darlene dave
g*
set结构通配符
Shell历史
• “最近几年许多其他shell开始流行,其中 最引人注目的是Korn shell。这个shell是综 合了Borne shell和C shell最佳特性,并加 入了许多自身特性的一个商业产品。Korn shell在许多方面类似于bash,两者都有大 量易于协同工作的特性。
Shell历史
命令缓存
• 每次shell找到搜索路径下的命令时,它首先将其放入哈希表。然后如 果再次使用该命令时,bash首先检查表,查看命令是否在里面。如果 在,使用表中给出的路径,执行该命令,否则进入搜索路径下查找。 • 可以使用hash命令查看哈希表的内容。 • $ hash • hits command • 1 /usr/bin/which • 1 ls • hash -r 清空缓存 • hash -p 输入命令到缓存 • set -o hashall
Emacs编辑模式
• set -o emacs • • • • • • • TAB 补全文件名 Ctrl + L 清屏 Ctrl + U 删除到行首 Ctrl + K 删除到行尾 Ctrl + A 移动到行首 Ctrl + E 移动到行尾 Ctrl + R 搜索命令历史
命令历史
• .bash_history • $HISTFILE • $HISTSIZE • history • fc -l
别名
• • • • • alias name=command alias search=grep alias lf='ls -F' alias lF=lf alias ls='ls -l' - shell保证循环扩展不会发 生
• unalias ls
选项
• set -o • set -o emacs • set -o xtrace • set +o
操作符 < 含义 小于 > 大于
<=
== &&
小于等于
等于 逻辑与
>=
!= || 关系操作符
大于等于
不等于 逻辑或
算术操作符
操作符 + * 含义 加 乘 / 减 除(整除)
%
>> | !
取余
右移位 位或 位非
<<
& ~ ^
左移位
位与 位非 位异或
算术变量和赋值
let x= '1+4' '2 + 3 * 5' '17 % 3' '48 >> 3' '17 | 3' $x 5 17 2 6 19 1+4 '(2+3) * 5' '17 / 3' '1 << 4' '17 & 3' '17 ^ 3' 5 25 5 16 1 18
• • • • •
$ declare -i val3=12 val4=5 $ declare -i result2 $ result2=val3*val4 $ echo $result2 60
算术表达式
• shell将$((和))包围的单词解释为算术表达式,算 术表达式内的变量前面不需要加美元标记,虽然 加上也没有错。
• Bourne Again shell(暗示其来源于Steve Bourne的shell)创建于GNU项目。bash 是GNU系统的标准shell。
• GNU项目由Free Software Foundation(FSF)的Richard Stallman始创, 用于创建一个Unix兼容的操作系统,并使 用该免费的发布版本替代所有的商业Unix 版本。
相关文档
最新文档