正文
在
Shell
脚本里定义多条 Linux 命令以及循环控制语句,然后将这些 Linux 命令一次性执行完毕,执行脚本文件的方式称之为,非交互式方式,
-
• windows 中存在
*.bat 批处理脚本
-
Shell
==脚本语言属于一种弱类型语言==,无需声明变量类型,直接定义使用强类型语言,必须先定义变量类型,确定是数字、字符串等,之后再赋予同类型的值 centos7 系统中支持的
Shell
情况,有如下种类
# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/bash
/usr/bin/bash
/bin/rbash
/usr/bin/rbash
/bin/dash
/usr/bin/dash
/usr/bin/tmux
/usr/bin/screen
Linux 默认
Shell
# echo $SHELL
/bin/bash
🦋
Shell 脚本
规则
在 Linux 系统中,
Shell
脚本或者称之为 (bash shell程序) 通常都是 vim 编辑,由 Linux 命令、bash shell 指令、逻辑控制语句和注释信息组成。
🦋 第一个 Shell 脚本
# vim test1.sh
# cat test1.sh
# 第一个 shell 脚本 这是注释
#!/bin/bash
echo "hello world!"
运行
Shell
脚本
# bash test1.sh
hello world!
🦋 Shebang
🐳 计算机程序中
Shebang
指的是出现在文本文件的第一行前两个字符
#!
在 Unix 系统中,程序会分析
Shebang
后面的内容,作为解释器的指令,例如
-
• 以
#!/bin/bash
开头的文件,程序在执行的时候会调用
/bin/bash
,也就是 bash 解释器
-
• 以 #!/usr/bin/python 开头的文件,代表指定python解释器去执行
-
• 以 #!/usr/bin/env 解释器名称 ,是一种在不同平台上都能正确找到解释器的办法
注意事项:
-
• 如果脚本未指定
Shebang
,脚本执行的时候,默认用当前 shell 去解释脚本,即 $SHELL。
-
• 如果
Shebang
指定了可执行的解释器,如 /bin/bash /usr/bin/python ,脚本在执行时,文件名会作为参数传递给解释器
-
• 如果 #! 指定的解释程序没有可执行权限,则会报错“bad interpreter: Permission denied”。
-
• 如果 #! 指定的解释程序不是一个可执行文件,那么指定的解释程序会被忽略,转而交给当前的 SHELL 去执行这个脚本。
-
• 如果 #! 指定的解释程序不存在,那么会报错 “bad interpreter: No such file or directory”。
-
• #! 之后的解释程序,需要写其绝对路径 (如:#!/bin/bash),它是不会自动到 $PATH 中寻找解释器的。。
-
• 如果你使用 “bash test.sh” 这样的命令来执行脚本,那么 #! 这一行将会被忽略掉,解释器当然是用命令行中显式指定的 bash。
🦋 脚本的常用执行方式
🦈 第一种:采用
bash
或
sh + 脚本的相对路径或绝对路径
(不用赋予脚本 +x 权限)
sh + 脚本的相对路径
$ sh helloworld.sh
Helloworld
sh + 脚本的绝对路径
$ sh /home/zfox/datas/helloworld.sh
helloworld
bash+脚本的相对路径
$ bash helloworld.sh
Helloworld
bash + 脚本的绝对路径
$ bash /home/zfox/datas/helloworld.sh
Helloworld
第二种:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限 + x)
(a)
首先要赋予 helloworld.sh 脚本的 + x权限
$ chmod 777 helloworld.sh
(b)执行脚本
相对路径(推荐使用)
$ ./helloworld.sh
Helloworld
绝对路径
$ /home/zfox/datas/helloworld.sh
Helloworld
注意:第一种执行方法,本质是 bash解析器 帮你执行脚本,所以脚本本身不需要执行权限。第二种执行方法,本质是脚本需要自己执行,所以需要执行权限
🦋 第二个 Shell 脚本:多命令处理
(1)需求: 在
/home/zfox/
目录下创建一个
ljw.txt
, 在
ljw.txt
文件中增加
I love ljw
(2)案例实操: