1、shell脚本的多种运行方式
1、示例demo(Linux)
cat > shell.sh <<'EOF' # 启动cat命令,接收标准输入的内容并将这些内容写入到名为shell.sh的文件中
#!/bin/bash
echo "开始学编程了,好刺激!!"
EOF
运行(两种)
1. 不强制用哪种解释器,但是你得 1. 加执行权限 2.代码中进行解释器声明。
添加执行权限,直接运行脚本路径
chmod u+x shell.sh
[root@m-61 ~/part3-shell]#./shell.sh
开始学编程了,好刺激!!
2. 无须执行权限,以解释器强制性去运行,明确指定了,用什么解释器去执行(bash、sh)
①bash运行
[root@m-61 ~/part3-shell]#bash shell.sh
开始学编程了,好刺激!!
②sh运行
[root@m-61 ~/part3-shell]#sh shell.sh
开始学编程了,好刺激!!
③点运行. 但是,要求,脚本第一行,必须有解释器生命
[root@m-61 ~/part3-shell]#. shell.sh
开始学编程了,好刺激!!
④source运行
[root@m-61 ~/part3-shell]#source shell.sh
开始学编程了,好刺激!!
[root@m-61 ~/part3-shell]#
[root@m-61 ~/part3-shell]#
2、python代码同理示例:
示例代码:
cat > hello.py <<'EOF'
#!/usr/bin/env python
#coding:utf-8
print ("python运行中文,条件限制有点多,但是你在学编程了,这些语法,都得记住。因为你会用到")
EOF
执行
①可以正确执行的:直接指定解释器去运行
[root@m-61 ~/part3-shell]# python hello.py
python运行中文,条件限制有点多,但是你在学编程了,这些语法,都得记住。因为你会用到
②添加执行权限
python2.0 这里报错的原因:
基于linux的bash环境,如果代码没声明用什么语言去执行,系统默认用bash去运行
附加:多重声明
在代码中有了声明,又强制用解释器去跑,谁优先?【外部的解释器执行优先级更高】
3、体验一波编译型语言的运行流程(golang示例)
# 1、安装golang
yum install epel-release golang -y
# ubuntu 对应的命令
sudo apt update
sudo apt install golang -y
# 2、查看golang编译器的版本
[root@m-61 ~/part3-shell]#go version
go version go1.17.7 linux/amd64
#3、编写golang的纯文本类型的代码
其实就是对原文件执行了:go build -o jiayou jiayou.go命令,生成一个可以在同架构机器上运行的二进制脚本文件(而无需重复安装环境)【docker安装的原理】
2、编译、解释语言区别[略]
我们使用vim编写纯文本的代码,利用bash\python2\python3等解释器对文本代码进行解释,才能执行对应的功能。【shell-解释性】
3、关于shell开发的规范详解
一切皆为文件
shell脚本的三剑客:grep、sed、awk
shell脚本的三剑客:grep、sed、awk
①grep
②Sed
③awk
shell解决的问题(linux命令+不同数据类型)
如何学好shell编程(shell语法+具体的数据文件)
vim+linux+正则+三剑客
4、shell脚本编写语法规范
4.1、一个规范的脚本示例
learn_shell_first.sh
#!/bin/bash #! 这个符号在计算机中读作shebang,表示指定用什么解释器运行脚本,只能在第一行,注释从第二行开始写
# Author: www.yuchaoit.cn 877348180@qq.com
# Create Time: 2022/05/25
# Script Description: this is my first shell script.
# ???????理解刷 111,尽量用英文。否则可能导致脚本显示乱码。
作为解释型语言,我们肯定是需要为代码的执行指定解释器的。而在linux环境中的话,我们则是通过 #! 写在第一行来指定用什么解释器运行脚本(bash\python)。
#!/bin/bash
#!/usr/bin/env python【#!/usr/bin/python】
4.2、vim脚本开发插件
vim自动判断,
*.sh
*.php
*.py
分别提供该语言的语法高亮支持,一些功能支持。
1. 打开vim配置文件,写入你自己的插件语法
[root@m-61 ~]#vim ~/.vimrc
2. 复制粘贴语法即可
syntax on
set nocompatible
"set number
"filetype on
"set history=1000
"set background=dark
""set autoindent
"set smartindent
"set tabstop=4
"set shiftwidth=4
"set showmatch
"set guioptions-=T
"set ruler
"set nohls
"set incsearch
""set fileencodings=utf-8
if &term=="xterm"
set t_Co=8
set t_Sb=^[[4%dm
set t_Sf=^[[3%dm
endif
function AddFileInformation_php()
let infor = "<?php\n"
\." ***************************************************************************\n"
\." * \n"
\." * Copyright (c) 2014 \n"
\." * \n"
\." **************************************************************************/ \n"
\." \n"
\." \n"
\." \n"
\."/** \n"
\." * @file:".expand("%")." \n"
\." * @author your name(www.yuchaoit.cn) \n"
\." * @date ".strftime("%Y-%m-%d %H:%M")." \n"
\." * @version 1.0 \n"
\." **/ \n"
\." \n"
\." \n"
\." \n"
\." \n"
\." \n"
\." \n"
\."?>"
silent put! =infor
endfunction
autocmd BufNewFile *.php call AddFileInformation_php()
function AddFileInformation_sh()
let infor = "#!/bin/bash\n"
\."\n"
\."# ***************************************************************************\n"
\."# * \n"
\."# * @file:".expand("%")." \n"
\."# * @author:www.yuchaoit.cn \n"
\."# * @date:".strftime("%Y-%m-%d %H:%M")." \n"
\."# * @version 1.0 \n"
\."# * @description: Shell script \n"
\."# * @Copyright (c) all right reserved \n"
\."#* \n"
\."#**************************************************************************/ \n"
\."\n"
\."\n"
\."\n"
\."\n"
\."exit 0"
silent put! =infor
endfunction
autocmd BufNewFile *.sh call AddFileInformation_sh()
function AddFileInformation_py()
let infor = "#!/usr/bin/env python\n"
\."# -*- coding: utf-8 -*-\n"
\."# ************************************************************************ \n"
\."# * \n"
\."# * @file:".expand("%")." \n"
\."# * @author:www.yuchaoit.cn \n"
\."# * @date:".strftime("%Y-%m-%d %H:%M")." \n"
\."# * @version 1.0 \n"
\."# * @description: Python Script \n"
\."# * @Copyright (c) all right reserved \n"
\."# * \n"
\."#************************************************************************* \n"
\."\n"
\."import os,sys"
\."\n"
\."print u'''中文'''\n"
\."\n"
\."exit()"
silent put! =infor
endfunction
autocmd BufNewFile *.py call AddFileInformation_py()
自己主要动手需要修改的内容:
vim插件的实际用法
在修改了vim配置文件之后,我们在通过vim命令去打开一个新的文件的话,则其文件会自动的增加给定内容。具体如下所示:
关于shell和python和运维的关系
python +shell 搞定运维自动化平台
4.3、代码调试运行方式
- 你以后再写完脚本后,如果直接运行,只能看到每一条命令的执行结果,看不到具体过程
- bash -x 脚本 ,查看脚本执行过程细节。
代码示例:
①语法正确版本
#!/usr/bin/env bash
# 用户输入交互
read -p "请输入账号:" username
read -p "请输入密码:" pwd
# 账号密码验证逻辑
if [[ "${username}" == "pyyu" && "${pwd}" == "www.yuchaoit.cn" ]];then
echo "尊贵的SVIP,欢迎您登录!"
else
echo "什么玩意?请你先注册!"
fi
②语法错误版本
#!/usr/bin/env bash
# 用户输入交互
read -p "请输入账号:" username
read -p "请输入密码:" pwd
# 账号密码验证逻辑
if [[ "${username}" == "pyyu" && "${pwd}" == "www.yuchaoit.cn" ]];then
echo "尊贵的SVIP,欢迎您登录!"
else
echo "什么玩意?请你先注册!"
4.4 、代码编写细节
更多其他shell的语法规则,咱们往后遇见了再一个个去介绍。
- 如括号,都是要成对出现的
如下符号,一次性,首尾都给写好。
例如大括号{}
中括号[]
小括号()
单引号' '
双引号" "
反引号` `
- shell语法要求,如条件判断的括号,前后必须有空格,学if的时候再细说。
- shell默认不强制要空格缩进,以换行区分每一行新代码,但是写缩进,看着更美观。