shell @ Linux (1)

开始学习Shell,管理自己的Linux。

跟随着编程语言的脚步,开始自己的Shell之旅。

1.Shell的种类

目前流行的Shell有ash, bash, ksh, csh, zsh等,目前Linux内置的Shell一般为bash,可以用

#echo $SHELL

来查看所使用的shell类型。

Bourne Again shell,它是Bourne shell的扩展,简称Bash,与Bourne shell完全向后兼容,并且在Bourne shell的基础上增加、增强了很多特性。Bash放在/bin/bash中,它有许多特色,可以提供如命令补全、命令编辑和命令历史表等功能,它还包含了很多C shell和Korn shell中的优点,有灵活和强大的编程接口,同时又有很友好的用户界面。

2.Shell脚本

Shell脚本的格式如下

#!/bin/sh

#comments

Your commands go here

首行中的符号#!告诉系统其后路径所指定的程序即是解释此脚本文件的Shell程序。如果首行没有这句话,在执行脚本文件的时候,将会出现错误。后续的部分就是主程序,Shell脚本像高级语言一样,也有变量赋值,也有控制语句。除第一行外,以#开头的行就是注释行,直到此行的结束。如果一行未完成,可以在行尾加上\,这个符号表明下一行与此行会合并为同一行。

将文件存盘后,需要修改文件的属性,命令如下

chmod +x hello.sh

执行脚本

./hello.sh

3.Shell变量

shell变量遵循一般变量的命名原则。用户定义的变量必须只由字母数字和下划线组成,并且第一个字符不能为数字,且变量对大小写敏感。

但shell变量没有类型之分,变量类型只是文本字符,系统是不会自动识别成其它类型的(如数字、布尔),这给变量的引用带来了挑战。

  • 变量的分类

本地变量: 本地变量在用户现在的shell生命期的脚本中使用,也常叫用户变量。

环境变量:环境变量用于所有用户进程,环境变量可以在命令行中设置,但用户注销时这些值将丢失,因此最好在.profile等登入配置文件中定义。  
常用环境变量有:
1. HOME: 用户目录的全路径名
2. PATH: shell从中查找命令的目录列表
3. IFS: 用作shell指定的缺省域分隔符
4. LOGNAME: 用户登录名
5. MAIL: 邮箱路径名

位置变量:
如果要向一个shell脚本传递信息,可以使用位置参数完成此功能。参数相关数目传入脚本,此数目可以任意多,但只有前9个可以被访问。
如果向脚本传送Welcome to script's world:
下面表格讲解了如何访问每一个参数
$0 $1 $2 $3 $4 $5 $6 $7 $8 $9
脚本名 Welcome to script's world

注释:$*表示变量所有参数

特定变量: 提供脚本运行时的一些相关控制信息
共有7个特定变量,
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。与位置变量不同,此选项参数可超过9个
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的进程ID号
$@ 与$#相同,但是使用时加引号,并在引号中返回每个参数
$- 显示shell使用的当前选项,与set命令功能相同
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误

 

影响变量的命令(变量命令)

declare 设置或显示变量
-f 只显示函数名
-r 创建只读变量
-x 创建转出变量
-i 创建整数变量
使用"+"代替"-",可以颠倒选项的意思,-r除外,
export 用于传递给子shell的变量
-- 表明选项结束,所有后续参数都是实参,
-f 表明在"名-值"对中的名字是函数名,
-n 把全局变量转换成局部变量,换句话就是不再传给shell
-p 显示全局变量列表,
shift
用于移动位置变量,调整位置变量,使$3的值赋给$2.$2的值赋予$1.

变量的赋值

格式: NAME=value

注意:等号两边不能有空格。

变量的引用

要引用变量,在变量之前加$即可,如下所示

name= "proinsight"

echo $name #方法1

echo ${name} #方法2

echo "$name" #方法3 

个人比较倾向于第二种方式。

变量的运算

4.Shell 运算符

运算符类型
按位运算符
~, <<, >>, &, |, ^
$[]表示形式告诉 shell 对方括号中的表达式求值

表达式替换
$[ ] 和 $(())
两种格式功能一样,所有的 shell 的求值都是用整数完成
$[ ] 可以接受不同基数的数字

image

赋值运算符
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=

5.Shell中的单引号和双引号

对于*等通配符,Shell会进行相关的扩展,引号(单引号和双引号)可以防止通配符*的扩展。

其中单引号更严格一些,它可以防止任何变量扩展;而双引号可以防止通配符扩展但允许变量扩展,如下代码所示

#!/bin/shecho $SHELLecho "$SHELL"echo '$SHELL'

运行结果为:

/bin/bash/bin/bash$SHELL

注释:

当然还有另外一种方式防止这种扩展的方法,即使用转义字符--反斜杆:\: 如下代码

echo \*.jpgecho \$SHELL

输出结果为:

*.jpg$SHELL

参考文献:

1.《SHELL 种类,版本及选择》 http://blog.chinaunix.net/u2/80598/showart_2291154.html

2《shell 变量》 http://www.scriptlearn.com/archives/34

3《shell运算符》 http://hi.baidu.com/cn_linux/blog/item/a7c64f16e9f7d24b21a4e970.html

4《Linux SHELL中的变量详述》 http://www.linuxidc.com/Linux/2008-01/10285.htm

5.《Linux Shell简介》 http://www.linuxsir.org/main/?q=node/135

原文地址:https://www.cnblogs.com/westfly/p/1883977.html