Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
Shell专题第2篇:Shell脚本入门
相关专辑:
Shell专题
<div style="display:none"></div> ## 2.1、脚本格式 脚本以`#!/bin/bash`开头(指定解析器) ## 2.2、第一个Shell脚本:helloworld.sh (1) 需求: 创建一个 Shell 脚本, 输出 helloworld (2) 过程如下 step1:创建`helloworld.sh`文件,内容如下 ```shell #!/bin/bash echo "helloworld" ``` step2:运行`helloworld.sh`文件,命令如下 ```shell [root@test001 shells]# chmod +x helloworld.sh [root@test001 shells]# ./helloworld.sh helloworld ``` ## 2.3、脚本的执行方式 上面我们使用的是`./helloworld.sh`来执行`helloworld.sh`脚本,其实执行shell脚本文件有很多方式,下面来看下。 ### 2.3.1、第1种:采用bash或sh+脚本的绝对路径或相对路径(不用赋予脚本+x权限) #### (1)sh+脚本的相对路径 ```shell [root@test001 shells]# pwd /root/shells [root@test001 shells]# sh ./helloworld.sh helloworld ``` #### (2)sh+绝对路径 ```shell [root@test001 shells]# sh /root/shells/helloworld.sh helloworld ``` #### (3)bash+脚本的相对路径 ```shell [root@test001 shells]# bash ./helloworld.sh helloworld ``` #### (4)bash+脚本的绝对路径 ```shell [root@test001 shells]# bash /root/shells/helloworld.sh helloworld ``` ### 2.3.2、第2种: 采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x) #### ①首先要赋予 helloworld.sh 脚本的+x 权限 ```shell [root@test001 shells]# ./helloworld.sh -bash: ./helloworld.sh: 权限不够 [root@test001 shells]# chmod +x helloworld.sh ``` #### ②执行脚本 ```shell [root@test001 shells]# ./helloworld.sh helloworld [root@test001 shells]# /root/shells/helloworld.sh helloworld ``` 注意:第一种执行方法,本质是bash解析器帮你执行脚本,所以脚本本身不需要执行权限;第二种执行方法,本质是脚本需要自己执行,所以需要执行权限。 ### 2.3.3、第3种:在脚本的路径前加上"."或者source ```shell [root@test001 shells]# . helloworld.sh helloworld [root@test001 shells]# source helloworld.sh helloworld ``` ## 2.4、父子shell 当我们使用xshell登录linux以后,出来了一个黑屏界面,如下,就开启了一个shell进程 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/290/43c9db42-ae87-4045-8201-95df42b75afb.png) 可以使用`ps -f`查看到到当前的shell进程,如下,使用是bash ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/290/335f3c4d-75ed-4621-9024-4b024eacd5c8.png) shell可以一层层嵌套,在当前shell中可以使用bash命令开启一个子shell,子shell中还可以继续执行bash命令再次打开一个子shell,多层级父子shell ```shell [root@test001 ~]# ps -f UID PID PPID C STIME TTY TIME CMD root 507 503 0 15:59 pts/0 00:00:00 -bash root 1608 507 0 16:14 pts/0 00:00:00 ps -f [root@test001 ~]# bash [root@test001 ~]# ps -f UID PID PPID C STIME TTY TIME CMD root 507 503 0 15:59 pts/0 00:00:00 -bash root 1611 507 0 16:15 pts/0 00:00:00 bash root 1647 1611 0 16:15 pts/0 00:00:00 ps -f [root@test001 ~]# bash [root@test001 ~]# ps -f UID PID PPID C STIME TTY TIME CMD root 507 503 0 15:59 pts/0 00:00:00 -bash root 1611 507 0 16:15 pts/0 00:00:00 bash root 1654 1611 0 16:15 pts/0 00:00:00 bash root 1687 1654 0 16:15 pts/0 00:00:00 ps -f ``` ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/290/76422f4c-15dd-487b-ac6e-19238d23a658.png) 使用exit可以一层层从里面的shell中向外退出,现在有3层shell,如果需要退出登录,则需要执行3次exit,如下 ```shell [root@test001 ~]# exit exit [root@test001 ~]# ps -f UID PID PPID C STIME TTY TIME CMD root 507 503 0 15:59 pts/0 00:00:00 -bash root 1611 507 0 16:15 pts/0 00:00:00 bash root 2205 1611 0 16:24 pts/0 00:00:00 ps -f [root@test001 ~]# exit exit [root@test001 ~]# ps -f UID PID PPID C STIME TTY TIME CMD root 507 503 0 15:59 pts/0 00:00:00 -bash root 2223 507 0 16:24 pts/0 00:00:00 ps -f [root@test001 ~]# exit 登出 Connection closed by foreign host. Disconnected from remote host(CentOS7_001) at 16:25:15. Type `help' to learn how to use Xshell prompt. ``` ## 2.5、执行shell脚本的几种方式的区别 刚刚上面介绍了执行shell脚本有3种方式 - 第1种:`bash 脚本文件`或者`sh 脚本文件` - 第2中:采用输入脚本的绝对路径或相对路径执行脚本(必须具有可执行权限+x) - 第3中:`. 脚本文件`或`source 脚本文件` 前2种方式都是在当前 shell 中打开一个子 shell 来执行脚本内容, 当脚本内容结束, 则子 shell 关闭, 回到父 shell 中。 第3种, 也就是使用在脚本路径前加“.” 或者 source 的方式, 可以使脚本内容在当前 shell 里执行, 而无需打开子 shell。 子shell中无法访问父shell中定义的变量,如果需要访问,则需在父shell中,通过`export 变量名`将变量提升为全局环境变量,这样内层的shell才可以访问到外层shell中的环境变量,这也是为什么我们每次要修改完/etc/profile 文件以后, 需要 source 一下的原因。 <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
相关专辑:
Shell专题