您的位置:首页 > 运维架构 > Shell

Shell脚本学习指南(一)——基本概念

2016-05-10 21:16 204 查看

基本概念

awk和Bourne Shell,是POSIX Shell的基础

除了POSIX标准,还有欧洲的X/Open标准

正则表达式的两种类型

BRE Basic Regular Expressions 基本型 grep使用

ERE Extended Regular Expressions 扩展性 egrep使用

小型Shell脚本的开发,首先,直接在命令行测试,然后将一系列命令放到脚本中,并设置可执行权限,最后使用脚本

$ cat > users       #建立文件,使用cat复制终端的输入
who | wc -l     #程序的内容
^D              #Ctrl + D表示end-of-line
$ chmod +x nusers   #让文件拥有可执行权限
$ ./nusers          #执行
6
$ cat nusers        #文件内容
who | wc -l


Shell脚本第一行的”#!”

#! /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

变量赋值时,等号左右不能有空格

获取变量的值,前面加$;如果值中含空格,需要用引号括起来

#! /bin/sh -
var1=1          #=>1
var2=aaa        #=>aaa
var3="bbb"      #=>bbb
var4="aaa bbb"  #=>aaa bbb
var5 =1         #=>错误
var6= 2         #=>错误


输出

echo

简单的输出,以换行符结束

-n选项,省略最后的换行符

echo命令标准不统一,所以可移植性有问题,只用此命令做最简单的输出,不要用复杂的参数

printf

必须显示地指定换行符

#! /bin/sh -
echo "Hello World!"                 #=>Hello World!
printf "Hello World! i = [%d]\n" 3  #=>Hello World! i = [3]


IO重定向

> 重定向标准输出

< 重定向标准输入

>> 追加到文件

| 管道

/dev/null 读取/dev/null,会立即返回EOF

基本命令查找

Shell在环境变量$PATH中查找要执行的命令

$PATH中,空项目用::表示,表示当前路径

以:开头,表示先找当前路径

以:结尾,表示最后找当前路径

用.代替空项目,增强可读性

不应该在查找路径中放进当前路径,因为会产生安全问题

执行跟踪

会打印Shell执行的语句

set -x 开始跟踪

set +x 取消跟踪

#! /bin/sh -
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

列出所有locale名称

LC_ALL=da locale -ck LC_TIME

查询丹麦文的时间日期格式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: