一、入门级
1、概念
Shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
Shell 是一种用c语言开发出来的脚本语言
2、常见的 Shell 有?
sh、bash、csh、tcsh、ash 等。
3、关于shell
1)Shell 是一个程序,一般都是放在/bin或者/usr/bin目录下,当前 Linux 系统可用的 Shell 都记录在/etc/shells文件中。/etc/shells是一个纯文本文件,你可以在图形界面下打开它,也可以使用 cat 命令查看它。
2)查看当前 Linux 系统的可用 Shell:cat /etc/shells
4、Linux Shell命令提示符
[root@localhost ~]$
各个部分的含义如下:
1) []是提示符的分隔符号,没有特殊含义。
2) root表示当前登录的用户,我现在使用的是 root用户登录。
3) @是分隔符号,没有特殊含义。
4) localhost表示当前系统的简写主机名(完整主机名是 localhost.localdomain)。
5) ~代表用户当前所在的目录为主目录(home 目录)。如果用户当前位于主目录下的 bin 目录中,那么这里显示的就是bin。
6) $是命令提示符。Linux 用这个符号标识登录的用户权限等级:如果是超级用户(root 用户),提示符就是#;如果是普通用户,提示符就是$。
超级用户的主目录为/root/,普通用户的主目录为/home/用户名/。
5、编写一个helloworld的shell脚本
打开文本编辑器,新建一个文本文件,并命名为 test.sh。
扩展名sh代表 shell,扩展名并不影响脚本执行,见名知意就好,如果你用 php 写 shell 脚本,扩展名就用php。
在 test.sh 中输入代码:
#!/bin/bash
#第二行起的#是注释语句,第一行是固定写法
echo "Hello World !" #输出语句
第 1 行的#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell;后面的/bin/bash就是指明了解释器的具体位置。
第 2 行的 echo 命令用于向标准输出文件(Standard Output,stdout,一般就是指显示器)输出文本。在.sh文件中使用命令与在终端直接输入命令的效果是一样的。
第 2 行的#及其后面的内容是注释。Shell 脚本中所有以#开头的都是注释(当然以#!开头的除外)。写脚本的时候,多写注释是非常有必要的,以方便其他人能看懂你的脚本,也方便后期自己维护时看懂自己的脚本——实际上,即便是自己写的脚本,在经过一段时间后也很容易忘记。
6、执行shell脚本方式
1)如果在shell文件同级目录下: ./test.sh
2) 直接运行 Bash 解释器(不需要在脚本文件的第一行指定解释器信息): /bin/bash test.sh
或者在 /bin 目录中: bash test.sh
3)(在当前进程中运行 Shell 脚本)source 命令启动:source test.sh 或者 . test.sh
7、Shell 的四种运行方式:
交互式的登录 Shell;
交互式的非登录 Shell;
非交互式的登录 Shell;
非交互式的非登录 Shell。
二、中级
1、定义变量(3种方式)
variable=value
variable='value'
variable="value"
2、使用变量(2种方式)
author="金庸"
echo $author
echo ${author}
3、修改已定义的变量的值
url="http://www.baidu.com"
echo ${url}
url="http://www.baidu.com/shell/"
echo ${url}
4、单引号与双引号的区别
#!/bin/bash
url="http://www.baidu.com"
website1='百度网址:${url}'
website2="百度网址:${url}"
echo $website1
echo $website2
输出结果是:
百度网址:${url}
百度网址:http://www.baidu.com
结论:
如果变量的内容是数字,那么可以不加引号;
如果真的需要原样输出就加单引号;其他没有特别要求的字符串等最好都加上双引号,定义变量时加双引号是最常见的使用场景。
5、将命令的执行结果赋值给变量(2种方式)
其中,variable 是变量名,commands 是要执行的命令。commands 可以只有一个命令,也可以有多个命令,多个命令之间以分号;分隔。
variable=`command`
variable=$(command) (推荐写法)
eg、将日志读出来赋值给变量输出
cd demo
log=$(cat log.txt)
echo $log
eg、打印Linux当前时间戳
#!/bin/bash
a=`date +%s`
echo ${a}
6、只读变量
#!/bin/bash
Url="http://www.baidu.com"
readonly Url
Url="http://www.baidu.com/readonly"
#写完运行测试
7、删除变量
unset variable_name
eg、变量被删除后不能再次使用;unset 命令不能删除只读变量。
#!/bin/sh
url="http://www.baidu.com"
unset url
echo $url
8、Shell变量的作用域(3个)
局部变量
只能在函数内部使用
1) 在 Shell 函数中定义的变量默认也是全局变量,它和在函数外部定义变量拥有一样的效果。
eg、
#!/bin/bash
#定义函数
function func(){
a=99
}
#调用函数
func
#输出函数内部的变量
echo $a
2) 要想变量的作用域仅限于函数内部,可以在定义时加上local命令,此时该变量就成了局部变量。
eg、
#!/bin/bash
#定义函数
function func(){
local a=99
}
#调用函数
func
#输出函数内部的变量
echo $a
全局变量
在当前 Shell 进程中使用,在 Shell 中定义的变量,默认就是全局变量。
环境变量
在子进程中使用