# Shell编程
# 概述
常用的shell有Bourne shell (sh)、C shell (csh) 和 Korn shell (ksh), 各有优缺点。Bourne shell 是 UNIX 最初使用的 shell,并且在每种 UNIX 上都可以使用, 在 shell 编程方面相当优秀,但在处理与用户的交互方面做得不如其他几种shell。Linux 操作系统缺省的 shell 是Bourne Again shell,它是 Bourne shell 的扩展,简称 Bash,与 Bourne shell 完全向后兼容,并且在Bourne shell 的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多 C shell 和 Korn shell 中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。
此处学习的为bash shell
# shell脚本的实质
- shell脚本语言是解释型语言
- shell脚本的实质-shell命令的有序集合
# 为什么要使用 ./filename.sh
行shell脚本呢?
普通的shell命令会从标准路径中进行查询,可以通过 echo $PATH 来查询,如果从这些标准路径中查询不到命令,那么就认为是错误的,即是提示命令找不到。所以需要使用 ./
# shell变量
shell允许用户建立变量存储数据,但不支持数据类型(整型、字符、浮点型),将任何赋给变量的值都解释为一串字符。 以$开头的字符在shell中会被解释为变量。 细节问题:
- 没有类型
- 没有空格作为分隔符(与C语言不同,C语言对空格不做任何编译),即"count = 1"为错误的。赋值的时候等号的两边都没有空格。 e.g.
count=1
echo $count
DATE='date'
echo $DATE
shell有以下4种变量:
- 用户自定义变量
- 位置变量即命令行参数
- 预定义变量
- 环境变量
# 用户自定义变量
- 在shell编程种通常使用全大写变量,方便识别 e.g. COUNT=1
- 变量的调用:在变量前加$ e.g. echo $HOME
- Linux shell/bash从右向左赋值(变量赋值的时候不用加$,变量调用的时候加$) e.g. Y=y X=$Y echo $X y
- 使用unset命令删除变量的赋值 e.g. Z=hello echo $Z hello unset Z echo $Z
# 位置变量
- $0 与键入的明了了行一样,包含脚本文件名
- $1,$2,.....$9 分别包含第一个到第九个命令行参数
# 环境变量
显示所有的环境变量的命令: export 或 env。 常用shell环境变量:
- $HOME: /etc/passwd文件种列出的用户主目录
- $IFS: Internal Field Separator,默认为空格,Tab及换行符
- $PATH: shell默认搜索路径
- $PS1,$PS2:默认提示符($)及换行提示符(>)
- $TERM: 终端类型,常用的有vt100,ansi,vt200,xterm等。
# 功能语句
shell程序与语句
- shell程序由0或多个shell语句构成。shell语句包括三类:说明性语句,功能性语句和结构性语句。
- 说明性语句: 以#开头到该行结束,不被解释执行。
- 功能性语句: 任意的shell命令,用户程序或其他的shell程序。
- 结构性语句: 条件测试语句、多路分支语句、循环语句、循环控制语句等。
# 说明性语句(注释行)
- 注释行可以出现在程序中的开始位置,既可以单独占用一行,也可以接在执行语句的后面。以#开始到所在行的行尾部分,都不被解释执行。e.g.
#!/bin/bash
#
# 本程序说明
#
command_1 #command_1的语句说明
......
command_n #command_n的语句说明
# 常用功能性语句(命令)
- read从标准输入读取一行,并赋值给后面的变量,其语法为:
read var
把读入的数据全部赋给var
read var1 var2 var3
把读入行中的第一个单词(word)赋值给var1,第二个单词赋值给var2,......把其余所有的词赋值给最后一个变量。
- 如果执行read语句时标准输入无数据,则程序在此停留等等候,直到数据的到来或被终止执行。
← 概要
关于评论
评论前请填好“昵称”、“邮箱”这两栏内容,否则不会收到回复,谢谢!