1. shell概括
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell 编程跟 java、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
2.shell种类‘
不同的shell具备不同的功能,shell还决定了脚本中函数的语法,Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途。
- bash
大多数Linux系统默认使用的shell,bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
- csh
C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。
- ksh
Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。许多安装脚本都使用 ksh
,ksh有42条内部命令,与bash相比有一定的限制性。
- tcsh
tcsh是csh的增强版,与 C shell 完全兼容。
- sh
是一个快捷方式,已经被/bin/bash所取代。
nologin
指用户不能登录
- zsh
目前Linux里最庞大的一种shell:zsh。它有84个内部命令,使用起来也比较复杂。一般情况下,不会使用该shell。
可以通过sh、bash命令切换
查看当前发行版可以使用的shell : cat /etc/shells
查看当前使用的shell : echo $SHELL 或 echo $0
环境变量中shell的匹配查找 : env | grep SHELL
查看当前进程 : ps
输入一条不存在的命令,查看出错的shell提示:tom-->bash:tom:command not found
3. 一个基本的shell
#!/bin/bash echo "Hello World !"
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
想要执行shell通过 chmod +x ./test.sh #使脚本具有执行权限
4. shell变量
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
①只读变量的定义 readonly xxxx ②删除变量 unset xxxx
5. shell字符串
①单引号,str = 'this is string' 单引号必须成对出现,单引号里的内容会原样输出,单引号字符串中的变量是无效的。
②双引号,str = "hello ,${yourname}" 双引号里可以有变量,可以出现转义字符。
获取字符串长度:echo ${#str}
提取字符串:echo ${#str:1:3}
查找字符串位置:username='abcd' echo `expr index "$username" ad`-----输出1(那个字符在前的位置)
6. shell参数传递
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推,其中 $0 为执行的文件名
获取执行shell文件名 :JOBID=`basename $0`;export JOBID
$# : 传递参数的个数
$@ : 输出所有传递的参数(同$*)
$! : 后台运行的最后一个进程的ID号
$$ : 脚本运行的当前进程ID号
$? : 表示"最后一次执行命令"的退出状态,一般0表示成功,非0数值表示没有成功
7. shell运算
①文件表达式
-e filename 如果 filename存在,则为真
-d filename 如果 filename为目录,则为真
-f filename 如果 filename常规文件,则为真
-L filename 如果 filename符号链接,则为真
-r filename 如果 filename可读,则为真
-w filename 如果 filename可写,则为真
-x filename 如果 filename可执行,则为真
-s filename 如果文件的长度不为0,则为真
-h filename 如果文件是软链接,则为真
② 整数变量表达式
-eq 等于
-ne 不等于
-gt 大于
-ge 大于等于
-lt 小于
-le 小于等于
③ 字符变量表达式
if [$a = $b] 字符串允许使用赋值号做等号
if [-z $b] 检测字符串长度是否为0,为0返回 true。
if [-n $b] 检测字符串长度是否为0,不为0返回 true。
if [$a] 检测字符串是否为空,不为空返回 true。
1、写入文件,追加内容,修改内容;shell,sed
2、LINUX命令大全:http://www.runoob.com/linux/linux-comm-awk.html