基本概念
- awk和Bourne Shell,是POSIX Shell的基础
- 除了POSIX标准,还有欧洲的X/Open标准
- 正则表达式的两种类型
- BRE Basic Regular Expressions 基本型 grep使用
- ERE Extended Regular Expressions 扩展性 egrep使用
- 小型Shell脚本的开发,首先,直接在命令行测试,然后将一系列命令放到脚本中,并设置可执行权限,最后使用脚本
$ cat > users
who | wc -l
^D
$ chmod +x nusers
$ ./nusers
6
$ cat nusers
who | wc -l
#! /bin/sh #告诉系统用哪种Shell解释
#! /bin/sh -f #-f表示执行脚本的参数,后面不能有空格,空格会跟着选项一起传给程序
/bin/sh -f /bin/ls -la
#! /bin/awk -f #声明一个awk脚本,参数为-f
#! /bin/sh - #表示没有选项。这是基于安全的考虑,可避免欺诈攻击
- Shell命令行参数
- 不需要参数的选项,可以合并
- 用分号分隔同一行里的多条命令
- Shell基本命令
- 内建命令
- Shell函数
- 外部命令——Shell会启动一个新进程执行外部命令,执行完后,回到Shell的进程继续执行
- $加数字,表示脚本的参数
- 如果参数超过9,则用大括号括起来 ${10}
ls -la
cd /usr/bin; ls -la
- 变量
- 已字母或下划线开头
- 变量可以是空值,空值就是null
- 变量赋值时,等号左右不能有空格
- 获取变量的值,前面加$;如果值中含空格,需要用引号括起来
var1=1
var2=aaa
var3="bbb"
var4="aaa bbb"
var5 =1
var6= 2
- 输出
- echo
- 简单的输出,以换行符结束
- -n选项,省略最后的换行符
- echo命令标准不统一,所以可移植性有问题,只用此命令做最简单的输出,不要用复杂的参数
- printf
echo "Hello World!"
printf "Hello World! i = [%d]\n" 3
- IO重定向
- > 重定向标准输出
- < 重定向标准输入
- >> 追加到文件
- | 管道
- /dev/null 读取/dev/null,会立即返回EOF
- 基本命令查找
- Shell在环境变量$PATH中查找要执行的命令
- $PATH中,空项目用::表示,表示当前路径
- 以:开头,表示先找当前路径
- 以:结尾,表示最后找当前路径
- 用.代替空项目,增强可读性
- 不应该在查找路径中放进当前路径,因为会产生安全问题
- 执行跟踪
- 会打印Shell执行的语句
- set -x 开始跟踪
- set +x 取消跟踪
set -x
echo "111"
set +x
echo "222"
+ echo 111
111
+ set +x
222
- 国际化与本地化
- internationalization i18n
- localization l10n
- Locale环境变量
- LANG 未设置任何LC_XXX时的默认值
- LC_ALL 用来覆盖所有其他的LC_XXX变量的值
- LC_COLLATE 排序规则
- LC_CTYPE 字符集
- LC_MESSAGES 消息与响应(仅POSIX使用)
- LC_MONETARY 货币
- LC_NUMERIC 数字
- LC_TIME 时间与日期
- 应该避免为任何的LC_XXX变量赋值
- locale -a
- LC_ALL=da locale -ck LC_TIME