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



相关文章
|
19天前
|
Linux Shell 开发工具
Shell的运行原理以及Linux当中的权限问题
Shell的运行原理以及Linux当中的权限问题
31 0
|
23天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
23天前
|
安全 Linux Shell
Linux SSH(Secure Shell)服务
Linux SSH提供安全网络协议,使用公钥加密技术确保远程服务传输安全。OpenSSH是实现SSH服务的免费开源工具,允许用户加密连接远程登录Linux服务器执行任务。SSH比Telnet更安全,防止数据被截获。SSH还支持端口转发和隧道,广泛应用于系统管理和网络维护,是安全远程访问服务器的重要工具。
21 1
|
24天前
|
Shell Linux UED
|
29天前
|
运维 Java Shell
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
Linux非常详细的shell运维脚本一键启动停止状态SpringBoot打成可运行jar包
28 0
|
2月前
|
Linux Shell 文件存储
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(深入df和dh的区别和探索)
41 1
|
21天前
|
存储 Shell Linux
【攻防世界】unseping (反序列化与Linux bash shell)
【攻防世界】unseping (反序列化与Linux bash shell)
|
22天前
|
Shell Linux
在linux shell脚本中root切换到普通用户执行脚本或命令的方法
在linux shell脚本中root切换到普通用户执行脚本或命令的方法
12 1
|
24天前
|
Shell Linux
【Linux】12. 模拟实现shell
【Linux】12. 模拟实现shell
28 2
|
1月前
|
Shell Linux
Linux脚本Shell脚本来实现一次性kill多个端口的进程
Linux脚本Shell脚本来实现一次性kill多个端口的进程
5 0

热门文章

最新文章