shell简介
Posted Lillard-Time
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell简介相关的知识,希望对你有一定的参考价值。
1、Shell简介
Shell是一个命令解释器,它在操作系统的做外层,负责直接与用户对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕返回给用户。这种对话方式可以是交互的方式(从键盘输入命令,可以立即的到shell的回应),或非交互(脚本)的方式。
shell 英文是贝壳的意思,命令解释器 shell 就像一个贝壳一样包住了系统核心。
2、什么是 Shell 脚本
当 linux 命令或语句不在命令行下执行(严格说,命令行也是 shell),而是通过一个程序文件执行时,该程序就被称为shell脚本或shell程序,shell程序很类似dos系统下的批处理程序(扩展名*.bat)。
3、Shell 脚本语言的种类:
在unix/linux中主要有两大类shell:
(1)Bourne shell (包括sh、ksh、bash)
(2)C shell(包括csh、tcsh)
Shell 脚本是弱类型语言,较为通用的shell有标准的Bourne shell(sh)和C shell(csh)。其中 Bourne shell(sh)已经被 bash shell取代。
Shell 的优势在于处理操作系统底层的业务,因为有大量的系统命令做支撑,shell开发更简单快速,服务运维的原则。
4、Linux操作系统默认Shell是Bash
查看当前系统的shell :echo $SHELL
5、shell 脚本的建立
开头:#!/bin/bash
其中开头的“#!”又称为幻数,在执行bash脚本的时候,内核会根据“#!”后的解释器来确定用哪个程序解释脚本中的内容,如果不设置,就用系统默认的shell来解释。
sh 为 bash 的软链接,标准写法是#!/bin/bash
6、shell脚本的执行
当shell脚本以非交互的方式(文件方式)运行时,它会先查找环境变量ENV,该变量指定了一个环境文件(通常是.bashrc,.bash_profile,/etc/bashrc,/etc/profile等),然后从该环境变量文件开始执行,当读取了ENV文件后,shell才开始执行shell脚本中的内容。
7、shell脚本的基本规范。
#!/bin/sh 或 #!/bin/bash
开头加版本版权等信息。
中括号两端要有空格
8、Shell 变量
(1)变量类型
变量可分为两类:环境变量(全局变量)和局部变量。
环境变量也称为全局变量,可以在创建他们的shell及其派生出来的任意子进程shell中使用。局部变量只能在创建他们的shell函数或脚本中使用。还有一些变量是用户创建的,其他的则是专用的shell变量。
(2)环境变量
环境变量用于定于Shell的运行环境,保证Shell命令的正确执行,Shell通过环境变量来确定登录的用户名、命令途径、终端目录等,所有的环境变量都是全局的,可用于子进程中,包括编辑器,Shell脚本和各类应用(crond任务时最好自定义)。
环境变量可以在命令行中设置,但用户退出时这些变量值会丢失。
定义环境变量的路径:
~/.bash_profile
/etc/bashrc
/etc/profile ----全局的环境变量
/etc/profile.d
所有环境变量均大写。环境变量应用于用户进程前,都应该用export命令导出,例如:export CHAN=1
8、查看系统的环境变量:
env
set
9、自定义环境变量
①export 变量名=value
②变量名=value;export 变量名
③declare -x 变量名=value
只在命令行生效。重启或退出终端失效
区别:上面两个只在用户下生效,切换到别的用户下不生效
10、取消本地变量和环境变量 -- unset
取消环境变量的时候变量不带 $,只有在输出的时候才带$
shell中变量的命名,一般是数字、字母、下划线组成,字母开头
数字开头定义变量不严谨。要用字母开头
11、单引号、双引号的区别
单引号里的内容原样输出。所见即所得
双引号里的变量解析,所有内容输出。
双引号里的命令可以用 `命令` 表示 也可以是 $(命令) 表示
无引号,定义的变量之间不能有空格。
echo的特殊性,后面内容不加引号也能输出,最好加双引号。
小结:脚本中普通字符串尽量双引号,单纯数字可以不加引号。
(1)awk 的单双引号存在特殊性:
awk 的单引号是解析变量,双引号原样输出,不加引号无内容。
12、Shell 特殊变量:
(1)位置变量:
$0 获取当前执行的shell脚本的文件名,如果执行脚本带路径那么就包括脚本路径。
$n 获取当前执行的shell脚本的第n个参数值,n=1..9,当n为0时表示脚本的文件名,如果n大于9,用大括号括起来{10}
$* 获取当前shell的所有参数,将所有的命令行参数视为单个字符串,相当于"$1$2$3",注意与$#的区别。
$# 获取当前shell脚本命令行中参数的总个数。
$@ 这个程序的所有参数"$1" "$2" "$3"...,这是将参数传递给其他程序的最佳方式。
13、查看文件的路径或名字
dirname 文件路径 显示当前目录的路径
basename 文件名字 显示当前文件的名字
14、$# 简单应用
传入的参数必须是两个。
15、进程状态变量。
$$ 获取当前shell的进程号(PID)
$! 执行上一个指令的PID
$? 获取执行上一个指令的返回值(0为成功,非0为失败)
$_ 在此之前执行的命令或脚本的最后一个参数。
16、$? 返回值参考
0 运行成功
2 权限拒绝
126 找到命令无法执行
127 找不到命令
>128 命令被强制结束
以上是关于shell简介的主要内容,如果未能解决你的问题,请参考以下文章