什么是shell

在linux内核基础上面向用户表现的形式,shell是一个交互性的命令解释器:读入并且解释用户输入的命令的程序

开始

#!/bin/bash
echo -e -n "hello world\n请输入用户名:" //参数-e和-n分别是启用反斜线控制符和不换行
read name	//从键盘读入,保存于name的变量中
echo "欢迎$name!回来" //将name的内容和echo的内容一起显示出来
  • 注意,shell脚本文件需要可执行权限才能运行
$ chmod u+x 文件 #给予可执行权限
$ ./文件	#执行shell文件,这里使用系统模式的shell程序运行
或
$ sh 文件 #和上面一样,这只是指定使用shell来运行脚本

shell运行和系统的shell环境有关,使用echo $PATH来查看环境变量的shell解释器路径在哪里

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:./node_modules/.bin

可见,输出的系统shell解释器变量路径,以:分割。

除了前面两个运行shell脚本的方式,还有:

$ bash 文件	#这不需要在脚本中定义解释器目录,使用bash为解释器,并且还能携带参数等待(这是和上面使用sh是一样的原理)
$ bash < 文件	#使用输入定向,让脚本里的内容输入到bash命令中,但是不能使用参数

基础

通配符

符号 含义
* 匹配任意的字符,可多次
? 匹配任意当个字符
[ ] 匹配字符组限定的任意一个字符
[^]或[!] 匹配不在该字符组的任意一个字符
{string1,string2,……} 匹配其中一个指定的字符串

例子:

$ ls file *	#匹配任意的字符为file开头的文件
$ ls d? #匹配d开头,文件名只有两个字符的文件
$ ls space.[co]	#匹配space.c或space.o
$ ls space.[1-9]	#可用-来指定范围,匹配space.1、space.2、...、space.9
$ ls [!H] *	#匹配非H开头的文件
$ ls /home/{user,ubuntu} #匹配/home/user和/home/ubuntu目录(当存在时)