首页 > 系统相关 >shell脚本--基础版本

shell脚本--基础版本

时间:2024-06-16 21:31:17浏览次数:22  
标签:opt test2 -- sh shell 版本 echo root

一、shell脚本

脚本就是可以运行的代码的集合,脚本语言(计算机语言)
**脚本的特点:**从上到下,按行执行。

Python 脚本语言,格式更严谨,严格的执行锁进。也是从上到下按行执行。

shell脚本就是在shell环境(/bin/bash)bash就是shell的解释器。Linux环境下的编程语句。
学习shell脚本的原因自动化运维。可以重复执行的,自动化的在系统中实现增删改查的操作。
shell的解释器,默认就是bash
sh:已经淘汰
bash: sh的扩展版本
csh : 类C语言的
tcsh : 整合了C语言的shell
nologin :用户无法登录到系统的shell

shell的作用:

1、自动化运维
2、批量化的重复操作,以及配合定时任务执行
3、有了脚本就可以减轻管理员的工作量
4、避免配置出错
5、提高处理批量文件的速度

shell脚本的构成:

第一行:声明解释器(默认bash,可以不写)
注释:#开头,注释的信息,注释不执行
可执行语句:Linux命令都可以作为可执行语句,按照行依次往下执行,一行一个可执行语句

shell执行方式:

第一种:

不给脚本执行权限的执行放方式
**sh:**就在当前的shell里生产一个子shell,允许的结果不改变父shell的环境,只是演示。
**source:**点命令 . 会改变当前shell的环境,也就是真正的执行代码。改变环境
**bash:**就在当前的shell里生产一个子shell,允许的结果不改变父shell的环境。只是演示

调试使用:bash sh

第二种:

脚本调试完毕,都是赋权执行
chmod 777 shell脚本文件名称
当前目录 ./ 非当前目录绝对路径 /opt/test.sh

crontab -e 定时任务

#!/bin/bash
#声明shell的解释器,这一行可以不写,默认就是bash./python  expect.(免交互),只要不是默认shell,其他的都要注明解释器。注释不会被执行,步骤的含义
#可以执行的语句
# this is my first shell
cd /boot
echo "当前的位置:"
# echo作用为打印
pwd
echo "当前目录为vml开头的文件"
ls -lh vml*

二、重定向操作:

标准输入:正确的命令输入
标准输出:正确的命令输入之后正确的输出
标准错误输出:错误的命令输入返回输入错误的提示
重定向类型:
**重定向输出:**1、> (只能把标准输出的结果保存到指定文件,会覆盖原有的文件内容)/
2、>> 标准输出的结果保存到文件,不会覆盖原有内容
2> 2>> 标准错误输出的结果,保存到指定的文件
混合输出保存 &> &>> 混合输出保存,既可以保存标准输出,也可以保存标准错误输出

重定向输入:< 从指定文件获取数据。

三、变量

(1)变量的作用:

用来存放系统和用户需要使用的特点的参数(值),变量保存在内存当中。调用的时候,直接从内存当中查找变量所在的内存地址

(2)变量的类型:

**自定义变量:**名称由用户自己定义,值也可以自定义。
变量名的规范:
1、不要使用系统的命令作为变量名
2、不要使用中文名称
3、不要使用特殊符号开头,可以下划线开头
4、不使用数字开头
5、变量名一般使用对应的英文名称来使用
6、变量要保持前后一致,要有注释。提高代码可读性。
变量值:int 整数类型 string 字符串(双引号引起来) 浮点:0.12 布尔:true false
声明的字符串用 " " 引起来

全局变量

对整个系统生效,所有用户都可以使用
全局生效,每个脚本的变量值,固定的。
持久性
共享性
全局变量适用于不需要经常更改的值
排错方法:bash -n shell脚本名 查看语法是否错误
bash -x shell脚本名 脚本运行的每一步都会进行打印,方便定位哪一步的问题。

环境变量:

环境变量是系统创建的,用来设置用户的工作环境
环境变量可以理解为特殊的全局变量,/etc/profile配置文件

[root@test2 opt]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
可执行的命令,或者可执行的程序的默认路径

[root@test2 ~]# PATh="$PATH:/root"
[root@test2 ~]# echo $PATH
位置变量:

又叫命令行参数,是在脚本的外面给脚本的内部传值。
$1 $2 $3 $4 $5 $6 $7 $8 $9 从第一个到第九个
10以后要用()把数字括起来
$(10)

[root@test2 opt]# vim test1.sh 
a=$1
b=$2
c=$(($a+$b))        # c=$[$a+$b]   +  -  *   /   %
echo $c
[root@test2 opt]# sh test1.sh 11 12
23
预定义变量:

编程语言和解释器提供,用户无法更改,只能由系统自行更新和设置。

$ 和 @ : ∗ ∗ 表示命令或者脚本要处理的参数。 ∗ ∗ 两者区别 ∗ ∗ :处理方式不同 ∗ ∗ 总结: @:**表示命令或者脚本要处理的参数。**两者区别**:处理方式不同 **总结: @:∗∗表示命令或者脚本要处理的参数。∗∗两者区别∗∗:处理方式不同∗∗总结: 和 @ ∗ ∗ 不加引号表现一致,都把参数一个一个处理 ∗ ∗ @**不加引号表现一致,都把参数一个一个处理 ** @∗∗不加引号表现一致,都把参数一个一个处理∗∗***加了引号,会把参数当成一个集体处理
KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲** 也是一个全局变量,统计传…? true false 命令执行之后返回的状态码 只有0表示成功,所有非0都表示失败,返回上一次执行命令的状态码

"$*"   $*   "$@"  $@   区别
[root@test2 opt]# cat qqq.sh 
function print_args {

for arg in "$*"                # "$*" 把所有的参数当做一个整体处理   
do                                         $*  不加引号,所有参数一个一个处理
 echo "$arg"                               $@、"$@"  结果与  $@结果一致
done
}
print_args "hello" "world" "!"
[root@test2 opt]# sh qqq.sh                [root@test2 opt]# sh qqq.sh 
hello world !                               hello
                                            world     
                                            !
     $#   用法
[root@test2  opt]# cat qqq.sh 
function print_args {

for arg in "$*"
do
 echo "$arg"
done
echo "传输了$#个"
}
print_args "hello" "world" "!"
[root@test2 opt]# sh qqq.sh 
hello world !
传输了3个
   $? 用法
[root@test2 opt]# cat  eee.sh
read -p "输入第一个数字" a
read -p "输入第二个数字" b
if [ $a -eq $b ]
then
echo $?
else 
echo $?
fi
[root@test2 opt]# sh eee.sh 
输入第一个数字11
输入第二个数字11
0
运算的不同表示方法
[root@test2 opt]# cat www.sh 
#!/bin/bash
read -p "输入第一个数" a
read -p "输入第二个数" b
# c=$(($a%$b))       取余
# c=$(($a/$b))       相除   
# c=$(expr $a+$b)    相加
# c=$(expr $a \* $b) 相乘
# let c=$a*$b        相乘
c=$(($a/$b))
echo $c
小数运算:
[root@test2 opt]# cat sss.sh
read -p "第一个数字:" a
read -p "第二个数字:" b
# + - * / % 取余,只能是整数运行。
#小数运算:bc是一个简易的系统自带的计算机程序,可以执行整数,也可以计算小数
c=$(echo "$a+$b" |bc )
echo $c
[root@test2 opt]# sh sss.sh 
第一个数字:10.1
第二个数字:11.2
21.3
单引号,双引号,反撇号` 的区别:
单引号
[root@test2 opt]# cat test1.sh 
a='tstr'
echo '$a'
[root@test2 opt]# sh test1.sh 
$a
双引号
[root@test2 opt]# cat  test1.sh
a="tstr"
echo "$a"
[root@test2 opt]# sh test1.sh 
tstr

双引号,就是弱引用,变量值就是变量值本身
单引号,强引用,变量值不再是本身定义的值,保持自身的字符串形式
**反撇号,**命令替换,把命令的执行结果传送给变量,作为变量的值,先执行命令,再给变量赋值。

如何自定义输入变量的值?

read -p   "提示信息:"  变量的名称
read -p   "数字b:" b
c=$(($a+$b))
echo $c

read
-p 指定提示符,提示符的内容包含在 " " 之间," "可以为空,但是双引号必须要有。

修改配置文件/etc/profile文件中 export a=5 export b=6 sh test1.sh (永久生效)

全局变量的使用方法
[root@test2 opt]# vim /etc/profile
export a=5
export b=6
"/etc/profile" 79L, 1995C      
[root@test2 opt]# sh test1.sh 
11
赋值问题?

i++ 先赋值,再加1

++i 先加1 ,再赋值

i- - 先赋值,再-1

– i 先 - 1 ,再赋值

标签:opt,test2,--,sh,shell,版本,echo,root
From: https://blog.csdn.net/qq_52448810/article/details/139603011

相关文章

  • JAVA开发 选择多个文件,系统运行后自动生成ZIP压缩包
    选择多个文件,系统运行后自动生成ZIP压缩包实现方法1.1代码块1.2运行结果截取相关知识实现方法案例简述:通过启动java代码来打开文件选择器对话框,用户选择确认需要进行压缩的文件,可一次性选择多个文件,选择完毕后点击按钮确认,指定位置自动生成压缩包。1.1代码块i......
  • Python中的数据类型转换
    Python中的数据类型转换是一项基本而实用的技能,它允许您在不同数据类型之间自由切换,以满足不同的运算或逻辑需求。以下是几种常见的数据类型转换方法:x=5y=float(x)print(y)#输出:5.02.浮点(float)转整数(int):使用int()函数可以将浮点数转换为整数,这会导致小数部......
  • 【MySQL】(基础篇十三) —— 联结
    联结本文介绍什么是联结,为什么要使用联结,如何编写使用联结的SELECT语句。介绍如何对被联结的表使用表别名和聚集函数。SQL最强大的功能之一就是能在数据检索查询的执行中联结(join)表。联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的一个极为......
  • 响应式布局mediaquery使用,鸿蒙NEXT星河版
    一、导入方法,定义响应式接口//组件的封装importmediaqueryfrom'@ohos.mediaquery'exportinterfaceLandType{isLandScape:boolean}二、监听当前是否是横屏状态//监听当前是否是横屏状态@StatelandRes:LandType={isLandScape:false}liste......
  • V信小程序绝对有效实用的推广方法
    小程序推广是提升用户量、增加品牌曝光度和促进业务增长的关键环节。以下是一些有效的小程序推广方法: 可以V信扫描二维码看示例1.社交媒体宣传:利用微信、微博、抖音、快手等社交平台,发布吸引人的内容,引导用户扫码进入小程序。可以通过KOL(关键意见领袖)合作,扩大传播范围。......
  • ArkTS本地化数据库SqlLight使用,鸿蒙NEXT星河版API(11)
    RelationalStore提供了一套完整的对本地数据库进行管理的机制,对外提供了一系列的增、删、改、查等接口,也可以直接运行用户输入的SQL语句来满足复杂的场景需要。谓词:数据库中用来代表数据实体的性质、特征或者数据实体之间关系的词项,主要用来定义数据库的操作条件。结果......
  • 【Linux】线程(一)
    谈论之前需要先谈论一些线程的背景知识其中就有进程地址空间,又是这个让我们又爱又恨的东西。注意:全篇都是在32位的情况下进行的目录背景知识:地址空间:内存:页表:基于以上理解文件缓冲区与虚拟地址:文件缓冲区:虚拟地址:线程:linux下的线程:与进程的澄清:win下的进程:与linux......
  • 移动硬盘数据恢复方法哪个好?六个硬盘恢复,新手也能用!
    移动硬盘数据恢复方法哪个好?移动硬盘,作为我们存储重要数据的常用设备,一旦里面的视频、文档、音频等资料突然消失,确实会令人烦恼和担忧。然而,因为数据丢失的原因可能多种多样,因此恢复方法也会有所不同。所以,建议您在遇到的第一时间去想办法恢复。那么,移动硬盘数据恢复方法哪个好......
  • Java编程:动态规划
    背包问题:有一个背包,容量为4磅,现有如下物品要求达到的目标为装入的背包的总价值最大,并且重量不超出要求装入的物品不能重复动态规划算法介绍===================================================================动态规划(DynamicProgramming)算法的核心思想是......
  • 2024年Java后端开发学习路线(建议收藏!)
    第二部分:Java高级在Java高级中,我们应该要熟练掌握。Java多线程/高并发,数据结构和算法,设计模式和JVM。第三部分:JavaWEB学习JavaWeb也就算正式开始了Java项目的开发,在这个阶段需要掌握Tomcat服务器的搭建,数据的传输。第四部分:主流框架和项目管理在这个阶段,我们需要......