首页 > 系统相关 >Shell阶段01 shell脚本概述, 脚本规范, shell执行方式, shell变量

Shell阶段01 shell脚本概述, 脚本规范, shell执行方式, shell变量

时间:2024-04-22 17:57:30浏览次数:28  
标签:脚本 Shell sh shell01 shell test root

Shell

什么是Shell

Shell就是一个命令解释器。

Shell分为交互式shell和非交互式shell。

交互式Shell就是命令行上面一条一条命令的执行

非交互式Shell就是以脚本的方式运行。

通过变量$-来查看是否是交互式或者非交互式Shell

交互式和非交互式的区别
[root@shell01 ~]# echo $-                #命令行上面的执行
himBH
[root@shell01 ~]# echo 'echo $-' > test.sh
[root@shell01 ~]# sh test.sh             #脚本中的执行
hB

h        #hashall        当Shell运行的时候,会记录保存执行过的命令        hash缓存表
i        #interactive    这是交互式shell的意思
m        #monitor        监控后台的进程的状态,监控模式(shell中执行命令,命令行上后台进程是看不到的)
B        #大括号扩展        支持 {}  整体,序列
H        #history        历史命令的记录(shell中执行命令是没有记录的)

什么是Shell脚本

1.系统命令的堆积
2.特定的格式。特定的语法 组成的一个文件
3.以.sh为结尾的。

为什么要学习Shell脚本

自动化的运维
减少不必要的工作
提高工作的效率

学习Shell脚本,我们需要什么技能

1.要对vim文本编辑器熟悉。        .vimrc (vim的个人环境配置文件)  要会运用
在根目录下,编辑.vimrc
[root@shell01 ~]# vim .vimrc
set tabstop=4
autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()"
func SetTitle()
    if expand("%:e") == 'sh'
    call setline(1,"#!/bin/bash")
    endif
endfunc

2.要有Linux命令的基础应用。 最少要熟悉80个以上的常用linux命令

3.对正则表达式要熟悉,对Awk Sed Grep 三剑客要熟练使用。

4.熟悉常见的linux服务,服务配置,网络,优化,日志等的操作。

Shell脚本能干什么

1.基础配置
2.安装软件
3.配置变更
4.业务不熟 Git jenkins Shell 进行自动化代码上线
5.日常的备份  通过定时任务+脚本
6.信息收集      Zabbix + Shell  自动化的监控系统的状态
7.日志分析     Elk
8.服务扩容/缩容 Zabbix + Shell

Shell脚本规范

1.脚本统一放在一个目录下
[root@shell01 ~]# mkdir -p /scripts

2.建议使用vim文本编辑器,有高亮显示

3.以.sh为结尾

4.脚本的开头要写#!/bin/bash    指定这个脚本使用什么命令解释器解释脚本中的命令,如果不写,默认是/bin/bash
#!    表示的是幻数    这个幻数必须是在脚本中的第一行,在其他行就是个注释信息

5. #号开头的都是注释信息,  写脚本最好加上注释信息   使用英文,不要使用中文,切记不要使用拼音

6.脚本带上作者相关信息

7.成对的符号,要一次书写完成  '' ""

8.格式的语法也要一次书写完成   if ; then fi     for i in do done

Shell的执行方式

脚本从上到下,从左到右的方式执行。如果报错会继续执行下去。
脚本执行时遇到子脚本,会执行子脚本,子脚本执行完成后,退出子脚本,继续执行脚本中的内容。

脚本运行时,会向系统内核请求一个进程。脚本就会在该进程下进行运行,终止操作。

执行通过哪些方式进行执行:
1. bash script-name 或者 sh script-name

#不需要执行权限
[root@shell01 ~]# echo "pwd" > test.sh
[root@shell01 ~]# bash test.sh 
/root
[root@shell01 ~]# sh test.sh 
/root

2. 通过绝对路径或者相对路径执行脚本 
path/script-name(绝对路径) 或者 ./script-name

#必须哟有执行权限
[root@shell01 ~]# /root/test.sh
-bash: /root/test.sh: Permission denied
[root@shell01 ~]# chmod u+x test.sh
[root@shell01 ~]# ll test.sh 
-rwxr--r-- 1 root root 4 Apr 22 23:00 test.sh
[root@shell01 ~]# /root/test.sh 
/root
[root@shell01 ~]# ./test.sh 
/root

3. source script-name 或者 . script-name
#实际是把脚本里命令调到当前环境(命令行)运行

#无需执行权限
[root@shell01 ~]# chmod -x test.sh     # 先去除执行权限
[root@shell01 ~]# ll test.sh 
-rw-r--r-- 1 root root 4 Apr 22 23:00 test.sh
[root@shell01 ~]# source test.sh 
/root
[root@shell01 ~]# . test.sh 
/root
#通过sh执行,能看到后台进程
[root@shell01 ~]# cat test.sh 
ping baidu.com
[root@shell01 ~]# sh test.sh
[root@shell01 ~]# ps aux|grep sh    # 可以查到sh进程   S+表示可中断状态
...
root       7524  0.0  0.1 113276  1192 pts/0    S+   23:22   0:00 sh test.sh
#通过source执行,查不到后台进程,是在当前环境命令行执行的
[root@shell01 ~]# ps aux|grep source
root       7559  0.0  0.0 112808   972 pts/1    R+   23:25   0:00 grep --color=auto source
[root@shell01 ~]# ps aux|grep test
root       7561  0.0  0.0 112808   976 pts/1    R+   23:25   0:00 grep --color=auto test
[root@shell01 ~]# ps aux|grep ping    # 可以查到ping命令
root       7567  0.0  0.2 150072  2000 pts/0    S+   23:27   0:00 ping baidu.com

4. cat script-name | bash
#不需要执行权限,将脚本中的命令调入到当前环境下执行

5. bash < script-name
#不需要执行权限,将脚本中的命令调入到当前环境下执行
[root@shell01 ~]# bash < test.sh

登录式Shell和非登录式

登录式     通过用户名和密码的方式进行登录的

非登录式   不是通过用户和密码的方式进行登录的

exit  logout

exit  可以退出登录式和非登录式Shell

logout  只能退出登录式Shell,不能退出非登录时Shell

脚本其实就是一个非登录时Shell,退出脚本要用exit
#执行bash命令进去,没有输入密码也是非登录式登录,要通过exit退出

Shell变量定义

变量的概述

什么是变量?
数据的一种传递方式。 用一个固定的字符串去表示一个不固定的字符串,数值,内容,数据等。
方便后续调用

变量名的规范
建议采用驼峰式方式
Hostname_Ip
变量名由字母,数字,下划线组成,不能使用空格,短横杠,特殊符号尽量不用
见名知意

Shell变量定义的方式
1.用户自定义变量
2.系统环境变量: 系统定义好的,主要是定义系统的信息的
3.位置参数变量  变量名是固定的,意思也是固定的,通过脚本进行传递数据
4.预定义的变量  脚本中已经定义好的,变量名是固定的,作用也是固定的 $-  $?   $$   $@  $*

 

标签:脚本,Shell,sh,shell01,shell,test,root
From: https://www.cnblogs.com/ludingchao/p/18151117

相关文章

  • Linux端口探测脚本
    #!/bin/bash#定义需要测试的主机和端口host="baidu.com"port="80"#设置循环测试的间隔时间(以秒为单位)interval=1#定义nc命令超时时间timeout_duration=1#定义保存结果的文件路径output_file="Sc4_port_test.txt"#循环测试端口连通性whiletrue;do#使......
  • pyhon脚本监控远程服务器存活情况,异常发送钉钉告警
    #!/usr/bin/python#!_*_coding:utf-8_*_importosimporttimefromcollectionsimportCounterfromdatetimeimportdatetimehost='localhost'ips=['192.168.xx.70','192.168.xx.83','172.16.xx.107']defping(ip):  #respo......
  • 性能测试——压测工具locust——脚本初步简介
    locusts脚本,初步简介:              参数:                                                              ......
  • ubuntu连接Xshell
    要想让Xshell连接ubuntu,首先需要让Ubuntu的IP地址固定下来,要不然每次链接都得重新设置主机ip进入ubuntu,打开终端,输入ifconfig查看inet的地址,与虚拟网络编辑器里的VMnet8的子网地址前三位与虚拟机里面的要一致,不一致的化可以点击下方的还原默认设置进行操作2.这些......
  • LLM开源小工具(基于代码库快速学习/纯shell调用LLM灵活管理系统)
    随着AI的各种信息的发展,LLM各种模型不断涌现,作为一名IT人员不得不向前走,不断探索学习发现新知识。随着学习,也了解到一些对于模型的调用,从而解决一些问题,或者对已有工具或应用的重写。如下是两个小工具介绍:QA-Pilot 是一个基于github开放的代码库进行对话式学习使用的工具(目前......
  • shell脚本正则表达式
    声明:以下内容为个人笔记,内容不完全正确,请谨慎参考。正则表达式含义:正则表达式使用的每个单独字符串来描述、匹配一些列符合语法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。在Linux中,grep,sed,awk等文本处理工具都支持正则表达式......
  • linux shell 编程学习总结
    1文件和数组1.1读文件并将文件内容保存到数组,遍历数组src.f文件内容./src/xxx_1.md./src/xxx_2.md./src/xxx_3.md./src/xxx_4.md./src/xxx_5.mdrun.sh#!/bin/bash###readflisttoarraysrc_array=()whilereadline;dosrc_array+=("$line")done<$1##......
  • 在Linux中,什么是Linux shell?
    在Linux中,Shell是一个命令行解释器,它为用户提供了一个与操作系统交互的文本界面。用户可以通过Shell输入命令,Shell会解释这些命令并将其转换为操作系统能够理解的信号或进程,从而执行相应的操作。1.主要特点命令解释器:Shell读取用户输入的命令,将其转换为操作系统能够执行......
  • 如何在linux中创建特定的脚本注释信息
    如何在linux中创建特定的脚本注释信息当然,以下是详细步骤在CentOS7系统中创建一个新的shell脚本模板并在Vim编辑器中配置自动加载模板的完整过程:步骤1:创建shell脚本模板首先,打开终端并创建一个模板文件,我们将其命名为.bash_script_template并放置在用户的家目录下:e......
  • shell脚本while循环、read读取控制台输入与函数
    while循环while循环结构while[条件判断]do程序done脚本示例:点击查看代码#!/bin/bashwhile[$a-le$1]do sum=$[$sum+$a]doneecho$sum简易写法:点击查看代码#!/bin/basha=1while[$a-le$1]do letsum+=a leta++doneecho$sumread读取......