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文件夹 ,有的话备份 否则会创建并备份



相关文章
|
1月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
323 9
|
1月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
176 2
|
1月前
|
算法 Linux Shell
Linux实用技能:打包压缩、热键、Shell与权限管理
本文详解Linux打包压缩技巧、常用命令与原理,涵盖.zip与.tgz格式操作、跨系统传文件方法、Shell运行机制及权限管理,助你高效使用Linux系统。
Linux实用技能:打包压缩、热键、Shell与权限管理
|
3月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
379 1
|
5月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
151 4
|
5月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
317 3
|
6月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
536 25
|
6月前
|
Linux Shell
shell_42:Linux参数移动
总的来说,参数移动是Linux shell脚本中的一个重要概念,掌握它可以帮助我们更好地处理和管理脚本中的参数。希望这个解释能帮助你理解和使用参数移动。
112 18
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
8月前
|
Shell Linux
【linux】Shell脚本中basename和dirname的详细用法教程
本文详细介绍了Linux Shell脚本中 `basename`和 `dirname`命令的用法,包括去除路径信息、去除后缀、批量处理文件名和路径等。同时,通过文件备份和日志文件分离的实践应用,展示了这两个命令在实际脚本中的应用场景。希望本文能帮助您更好地理解和应用 `basename`和 `dirname`命令,提高Shell脚本编写的效率和灵活性。
631 32

热门文章

最新文章