定义一个shell脚本并运行
定义一个shell脚本:
vim 01.sh #shell脚本是以.sh结尾的文件
#!/bin/bash #指定shell程序的解释器,/bin/bash是红帽自带的解释器
echo "hello shell" #这是一条输出语句
运行脚本:
sh 01.sh #运行shell脚本
运行结果:
将shell脚本中每一行语句运行完,执行结果就是输出想要输出的语句
实现程序与用户进行交互
vim 02.sh
从终端读取用户输入的数据,并赋值给preson变量,再用read命令来从标准输入中读取用户输入的数据:
#!/bin/bash
#程序需要与用户交互
echo "What is your name ?" #输出一条语句,询问用户名字
read preson #读取用户的输入,还需要接收,用preson接收用户输入的名字
echo "hello,$preson" #引用变量,在shell中引用变量需要用$符号
sh 02.sh
执行结果:
shell解释器执行shell脚本中的每一个命令,首先执行第一行命令,输出语句询问用户名字,然后执行第二行语句,让用户输入名字,在此处shell脚本需要定义一个变量,用于接收用户输入的信息,最后执行第三行语句,调用变量,问候用户。
shell脚本的运行有两种方法
运行shell脚本有两种方法,一种在进程中运行,另一种是在当前shell进程中运行。
vim 01.sh
运行脚本方法:
方法一:
sh 02.sh #在新的进程里运行脚本
方法二:
shell脚本没有执行权限,当添加了执行权限,就可以不指定编译解释器,直接用./02.sh执行shell脚本。这样的作用是在编辑shell脚本时可以不指定编译器,使用./命令时,直接使用系统中默认的编译器版本bash版本。
ls -l 02.sh #查看权限,显示没有执行权限
chmod +x 02.sh #加执行权限
./02.sh #在新的进程里运行脚本
执行结果
当给shell脚本添加可执行权限后,不论在shell脚本中有无指定shell解释器,都可用./命令执行shell脚本,因为如果shell脚本中指定了解释器,执行时就用脚本中的解释器,当脚本中没有指定解释器,./命令就可以使用默认的shell解释器,而红帽linux版本使用的默认shell解释器是bash版本。
方法三:指定使用解释器运行
cat /etc/shells #查看shell编译器版本
/bin/sh 01.sh #指定/bin/sh版本运行脚本
这么做是将脚本01.sh作为参数传递给了解释器。
显示当前终端的进程
vim 03.sh
echo $$ #当前进程
source 03.sh #强制执行脚本
source命令的作用:
1.当没有给脚本执行权限时,./命令执行脚本会被拒绝,这时可以使用source命令执行,source是强制执行脚本。
2.. 03.sh
也可以强制执行脚本。
3../03.sh #在新的进程里运行脚本
source 03.sh #在当前进程中运行脚本
编辑一个shell脚本,显示当前目录
vim 04.sh
把pwd运行的结果赋值给userdir,userdir是一个变量。
运行脚本:
方法一:
sh 04.sh #新进程里运行
echo $userdir #运行没有显示
方法二:
source 04.sh #在当前的进程中运行的
echo $userdir #运行显示当前目录
两种执行方法为何显示的结果不一样?
因为第一种方法是在新的进程中运行的,所以显示不了当前目录,当前目录为空;第二种方法是在当前进程中执行的,所以可以显示当前目录。