linux&shell

简介: linux和shell的基础知识

目录


前言


一、Shell编程基础知识


1、什么是Shell


2、Shell 的特性


3、Shell 命令


一.shell变量概述


一.变量命名规范


二.shell变量定义的方式


系统环境变量


位置变量


预定义变量


计算器脚本


if判断


for循环


前言

谁需要学习 Shell 编程?


Linux运维工程师:编写Shell程序进行服务集群管理。

Python和JavaEE程序员:编写Shell脚本程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。

大数据程序员:编写Shell程序来管理集群。



一、Shell编程基础知识


1、什么是Shell


Shell是一种用户使用的解释型程序,它是操作系统的一部分,派生自多种不同的系统。它是一种命令解释器,它可以读取用户的输入,解释该输入,并执行相应的命令。

Linux的Shell有很多种,如bash,csh,ksh等。当前常用的为bash


2、Shell 的特性


(1)交互式:用户可以通过Shell的界面实现与计算机的交互,以便用户和计算机之间的信息交换。


(2)自动化: Shell 可以将用户编写的一系列命令,保存为脚本,并在需要的时候自.动执行,以减少用户的工作量。


(3)扩展性: Shell 可以实现过滤和管道功能,可以与其他应用程序和编程语言结合使用,实现不同应用程序、不同编程语言之间的信息传递。


3、Shell 命令


Shell 编程快速入门


进入 Linux 终端,编写一个 Shell 脚本 hello.sh :


创建脚本文件  以.sh为后缀


vi hello.sh

输出 “hello world”

 

1. 
#!/bin/bash 
2. 
3. echo 'hello world!'


运行:


chmod +x hello.sh  给文件上权限


./test.sh                   #当前路径下执行,以普通用户执行,需要有x执行权限

/sh/test.sh                 #绝对路径,以普通用户执行,需要有x执行权限

sh test.sh                  #以管理员身份执行,没权限也可以

source test.sh              #以管理员身份执行,没权限也可以

.  tets.sh                  #以管理员身份执行,没权限也可以


终端打印出 hello world! 。



说明:


#! 告诉系统这个脚本需要什么解释器来执行。

文件扩展名 .sh 不是强制要求的。

方法1 直接运行解释器,hello.sh 作为 Shell 解释器的参数。此时 Shell 脚本就不需要指定解释器信息,第一行可以去掉。

方法2 hello.sh 作为可执行程序运行,Shell 脚本第一行一定要指定解释器。


复杂脚本可以加注释


注释符号     #  注释


例:#查看文件是否存在

1. /usr/bin/ls -l     #查看文件是否存在
2.

程序需要完整性

符号先写全  (容易丢失)

1. 
show(  ){
2. 
3. 
4. 
5. }

一.shell变量概述

变量=容器

放取=存取

定义变量

a(变量名)=(赋值)12(变量值)    #等号两边不能有空格

echo $a   取变量值,变量之前加$取值

一.变量命名规范

命名要求:字母、数字、下划线、下划线符号(除下划线其他符号都不行)、数字不能开头。

变量名尽量具备含义,不能与系统命令相同

HostName_        # 驼峰式命名

存数据  

ip=192.168.8.128         #定义变量ip 值为192.168.8.128

取数据

echo ${ip}

可以引用定义过的变量


单引号只会原封不动输出



可以定义命令

Dir=$(ls)  //$()表示先执行

反撇号可以代替$( )

区别 : 反撇号不能嵌套

脚本里尽量不使用前台命令   -->  ls cat         想要显示提示信息  使用 echo “  ”

创建文件夹和文件都可以,他们都是后台命令


二.shell变量定义的方式

用户自定义变量:人为定义变量

系统环境变量:系统操作环境相关变量

位置参数变量:向脚本传递参数

预定义变量:bash定义好的变量,名称固定

定义的变量为局部变量   -->  作用域(当前bash)

更换bash后变量消失

1.定义字符串时必须要加双引号

2.引用时需加大括号

案例:引用串联组成新变量


Ifconfig ens33 |head-2 |tail-1|awk '{print $2}'  #截取出ip信息

Free -m  |grep ^M|awk '{print $3/$2*100}'   #计算内存使用率

Df -hT |grep centos7-root |awk '{print $6}' #取硬盘使用占比

1. Info="IP:${Ip} 内存使用占比:S {Mem} 便盈使用占比:${disk}"
2. echo $Info
3. IP:192.168.8.128 内存使用占比:40号硬盘使用占比:28号

查看变量

set

清除变量

unset time       #直接跟变量名

嵌套卸载软件     先运行里面的$( )再运行外面的$ ( )

定义全局变量     export    切换bash也不会丢失

export  Ip=$(ifconfig ens33|head -2|tail -1 |awk '{print $2}')

系统环境变量

PATH路径

添加环境变量

                      //${  }:跟命令文件  ,不会覆盖原路径

/etc/profile 是PATH的shell配置文件

位置变量

参数中间由空格隔开

$0表示返回文件名

传递参数$1第一个参数 $2第二个参数进行脚本里的操作

到10时需要${10}

预定义变量

传递所有参数的内容(值) $*    $@                          

统计所有参数的个数$#

返回当前进程的运行pid    $$

返回上一个命令的执行结果     $?     返回值为0为真  返回其他值为假

交互式(动态)方式赋值     read -p  输出一个帮助性的语言

计算器脚本

指定备份的位置--> 保存到变量dir中 -->创建变量文件夹-->

Ping -c 1 www.baidu,com        #-c指定ping的次数

ping -c 1 -w 1 192.168.8.4       #-w指定等待时间

输入覆盖

> file        //清空文件

混合输出&>  (正确错误信息都会输出   会覆盖源文件)  &>>追加输入(不会覆盖源文件)


/dev/null  垃圾桶   脚本中前台命令都需要输出到垃圾桶里


使用 echo $?  查看命令是否成功  0真   其他假

if判断

for循环

ip=192.168.8.                                                           #定义变量ip为192.168.8.网段  

for I in {1..8}                                  #for循环起始 定义变量I  值为后面的循环值

do                                                                          

ping -c 1 -w 1 ${ip}${i} $> /dev/null                  #执行ping命令并把结果输出到垃圾桶中

if [ $? -eq 0 ];then           #if判断  $? :返回上一条命令的结果  -eq :0 为真,其他为假

    echo "${ip}${i}可以通信!"                    #0为真那么执行

else

    echo"${ip}${i}不可以通信!"                   #其他数执行

fi                                               #if循环终结

done                                             #do循环终结

编辑好脚本后chmod+x 上执行权限

查看是否有backup文件夹 ,有的话备份 否则会创建并备份



相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
33 0
Linux 如何更改默认 Shell
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
80 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
778 2
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
37 0
|
3月前
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
|
4月前
|
JavaScript 关系型数据库 Shell
Linux shell编写技巧之随机取字符串(一)
本文介绍了Linux Shell脚本的编写技巧,包括环境配置、变量命名规则和缩进语法,并提供了一个实例练习,展示如何使用`$RANDOM`变量和`md5sum`命令来生成随机的8位字符串。
68 4
|
4月前
|
监控 Shell Linux
在Linux中,如何使用shell脚本进行系统监控和报告?
在Linux中,如何使用shell脚本进行系统监控和报告?

热门文章

最新文章