shell脚本

一.shell是什么

人和计算机内核之间的中介

二.linux当中的shell有哪些

1.bash

主流,也是绝大多数linux系统默认

2.sh

3.csh

类c语言的shell

4.tcsh

和csh类似,相当于升级版

5.nologin

也是一种shell,禁止用户登录

三.shell--脚本

扩建语言,动态语言,是一种编程语言,控制软件的程序,只有被调动才会运行

脚:把保存在文本中的代码执行起来

本:代码是保存在文本当中,特定条件(运行代码的条件)

四.shell脚本的作用

1.自动化运维

2.批量化重复操作,可以通过脚本和计划任务来进行

3.减轻了管理人员的工作量

4.避免配置出错

五.shell脚本的结构

1.vim first.sh(默认以sh结尾的文件是脚本文件)

2.#!/bin/bash

3.#this is my first shell-script

4.开执行语句:所有linux可执行命令都可以是代码内容

六.shell脚本运行

1.调试模式

脚本没有权限的情况下的运行模式

bash 脚本文件

sh 脚本文件

source 脚本文件(点命令,真正执行)

root@wth-virtual-machine:~# bash firsh.sh

2.赋权执行

chmod 777 脚本文件

./脚本文件

root@wth-virtual-machine:~# chmod 777 first.sh
root@wth-virtual-machine:~# ls
first.sh  snap
root@wth-virtual-machine:~# ./first.sh 
当前所在目录
/boot
展示其中以vml开头的文件
lrwxrwxrwx 1 root root  24 10月 28 10:10 vmlinuz -> vmlinuz-6.8.0-47-generic
-rw-r--r-- 1 root root 14M  2月 21  2024 vmlinuz-6.5.0-18-generic
-rw------- 1 root root 15M 10月  2 22:43 vmlinuz-6.8.0-47-generic
lrwxrwxrwx 1 root root  24 10月 28 10:10 vmlinuz.old -> vmlinuz-6.5.0-18-generic

3.定时任务

脚本必须要是绝对路径

七.重定向

1.重定向输入

< 从指定的文件文件获取

2.重定向输出

> 只能把标准输出保存到文件当中去,会覆盖

root@wth-virtual-machine:/opt# cat test.txt 
123123123123123123123123123123123123
root@wth-virtual-machine:/opt# ls > test.txt 
root@wth-virtual-machine:/opt# ls
123  gongxiang1  gongxiang2  test.txt  xy104  xy105
root@wth-virtual-machine:/opt# cat test.txt 
123
gongxiang1
gongxiang2
test.txt
xy104
xy105

>> 只能把标准输出保存到文件当中去,不会覆盖

root@wth-virtual-machine:/opt# ls >> test.txt 
root@wth-virtual-machine:/opt# cat test.txt 
123
gongxiang1
gongxiang2
test.txt
xy104
xy105
123
gongxiang1
gongxiang2
test.txt
xy104
xy105

3.重定向错误输出

2> 将错误信息保存到指定的文件,会覆盖

root@wth-virtual-machine:/opt# lsss 2> test.txt 
root@wth-virtual-machine:/opt# ls
123  gongxiang1  gongxiang2  test.txt  xy104  xy105
root@wth-virtual-machine:/opt# cat test.txt 
找不到命令 "lsss",您的意思是:
  "lsns" 命令来自 Debian 软件包 util-linux (2.37.2-4ubuntu3.4)
  "less" 命令来自 Debian 软件包 less (590-1ubuntu0.22.04.3)
  "lssu" 命令来自 Debian 软件包 nilfs-tools (2.2.8-1)
尝试 apt install <deb name>

2>> 将错误信息保存到指定的文件,不会覆盖

4.混合输出

&> 会覆盖

&>> 不会覆盖

root@wth-virtual-machine:/opt# ls &>> test.txt 
root@wth-virtual-machine:/opt# cat test.txt 
找不到命令 "lsss",您的意思是:
  "lsns" 命令来自 Debian 软件包 util-linux (2.37.2-4ubuntu3.4)
  "less" 命令来自 Debian 软件包 less (590-1ubuntu0.22.04.3)
  "lssu" 命令来自 Debian 软件包 nilfs-tools (2.2.8-1)
尝试 apt install <deb name>
123
gongxiang1
gongxiang2
test.txt
xy104
xy105

八.变量

1.变量名

系统定义好的,每个用户都可以使用(全局变量)一般情况下是不可以修改

自定义变量:主要是用户定义的名称和名称对应的参数

自定义变量名:

1.不要用系统的命令作为变量名称

2.不要使用中文

3.变量名不能使用特殊符号来开头,可以使用下划线开头

4.定义变量时,一定要是字母开头,不能数字开头

5.变量名最好是对应的名称的英文

2.变量值

int ------整数,没有小数点

string------字符串,字母或者数字组成,会用引号引起来

布尔-----ture false 为真还是为假(一般条件判断的返回值)

浮点------小数

3.打印变量值

echo $nmu==变量名

root@wth-virtual-machine:/opt# a=345
root@wth-virtual-machine:/opt# echo $a
345

4.拼接

echo ${num}shuai

root@wth-virtual-machine:/opt# echo "${a}789"
345789

5.变量的作用范围

1.全局变量(主要是系统定义的,不能改的)

vim /etc/profile

export a=1

export b=2

如果有需要一直不变的参数可以供所有使用,就可以配置

副作用:一旦有改动,增加了复杂性

2.环境变量(也是全局变量的一种)

系统创建的,设置用户的工作环境

echo $USER 当前登录用户

echo $HOME 当前用户的家目录

echo $PATH 查看当前的搜索路径

如何添加

1.chmod 777 /opt/123.txt

2.PATH="$PATH:/opt"

3.位置变量,脚本外传参

root@wth-virtual-machine:/opt# vim first.sh 
root@wth-virtual-machine:/opt# sh first.sh 10 20
10 20

4.预定义变量(全局变量的一种,脚本解释器提供,不能修改)

$*

表示命令或者脚本需要处理的参数,区别在于处理的方式不同

$@

区别:

"\*",会把传入的参数当做一个整体来进行处理,不加双引号和@是一样的,都是一个个处

$@ , 加不加双引号,都会把参数一个一个的处理

$#: 记录传递给脚本参数的个数

$?: 记录的上一次执行命令的返回码,用来判断上一次执行的命令是否成功

0和非0

只有0表示上一次的命令执行成功,其他的都是失败

9.变量运算

1.整数运算

a=1

b=2

c=((a+$b))

echo $c

a=1
b=2
c=$(($a+$b))
echo $c

root@wth-virtual-machine:/opt# vim first.sh 
root@wth-virtual-machine:/opt# bash first.sh 
3

let i=10*10

echo $i

let i=10*10
echo $i

root@wth-virtual-machine:/opt# vim first.sh 
root@wth-virtual-machine:/opt# bash first.sh 
3

e=$(expr 19 \* 5)

echo $e

e=$(expr 19 \* 5)
echo $e

root@wth-virtual-machine:/opt# vim first.sh 
root@wth-virtual-machine:/opt# bash first.sh 
3
100
95

2.非整数运算

bc运算器

num=$(echo "4.4+5.5" | bc)

echo $num

num=$(echo "4.4+4.5" | bc)
echo $num

root@wth-virtual-machine:/opt# vim first.sh 
root@wth-virtual-machine:/opt# bash first.sh 
3
100
95
8.9

awk

num1=$(awk 'BEGIN{print 4.45*1.2}')

echo $num1

num1=$(awk 'BEGIN {print 4.4*1.2}')
echo $num1

root@wth-virtual-machine:/opt# vim first.sh 
root@wth-virtual-machine:/opt# bash first.sh 
3
100
95
8.9
5.28
相关推荐
勤奋的凯尔森同学1 小时前
webmin配置终端显示样式,模仿UbuntuDesktop终端
linux·运维·服务器·ubuntu·webmin
丁卯4042 小时前
Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用
服务器·后端·golang
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
人间打气筒(Ada)3 小时前
MySQL主从架构
服务器·数据库·mysql
落笔画忧愁e4 小时前
FastGPT快速将消息发送至飞书
服务器·数据库·飞书
小冷爱学习!4 小时前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
技术小齐5 小时前
网络运维学习笔记 016网工初级(HCIA-Datacom与CCNA-EI)PPP点对点协议和PPPoE以太网上的点对点协议(此处只讲华为)
运维·网络·学习
ITPUB-微风5 小时前
Service Mesh在爱奇艺的落地实践:架构、运维与扩展
运维·架构·service_mesh
打不了嗝 ᥬ᭄5 小时前
Linux的权限
linux
落幕5 小时前
C语言-进程
linux·运维·服务器