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
相关推荐
Jtti36 分钟前
Jtti:如何知晓服务器的压力上限?具体的步骤和方法
运维·服务器
命里有定数37 分钟前
Ubuntu问题 - 显示ubuntu服务器上可用磁盘空间 一条命令df -h
服务器·ubuntu·数据集
TPBoreas1 小时前
当你项目服务器磁盘报警
运维·服务器
Labiod3 小时前
PlantUML 安装
linux·运维·服务器
命里有定数5 小时前
Ubuntu问题 -- 设置ubuntu的IP为静态IP (图形化界面设置) 小白友好
linux·tcp/ip·ubuntu·ip
荆棘鸟骑士5 小时前
Linux修改/etc/hosts不起作用(ping: xxx: Name or service not known)的解决方法——开启NSCD
linux
猫猫不是喵喵.5 小时前
【Linux】Linux入门实操——进程管理(重点)
linux·运维·服务器
Web极客码6 小时前
如何修复WordPress卡在维护模式
服务器·网络·github
jackknight6 小时前
浪潮云启操作系统(InLinux) bcache宕机问题分析
linux
基极向上的三极管7 小时前
【Linux学习】【Ubuntu入门】1-8 ubuntu下压缩与解压缩
linux·ubuntu