首页 > 系统相关 >Linux-->shell

Linux-->shell

时间:2022-09-24 21:13:28浏览次数:66  
标签:文件 shell 变量 -- 语法 read Linux 变量名

shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序。

用户可以用Shell来启动,挂起,停止,编写一些程序。

image

Shell脚本执行方式

脚本格式要求

  1. 脚本以 #!/bin/bash 开头
  2. 脚本需要有可执行权限
  3. 一般shell脚本文件以 .sh 为后缀
  4. 在shell中用 # 表示注释
  5. 多行注释为 起始处 :<<! 结尾处 !

创建的shell脚本文件即使是root权限也不会给x执行权限,需要自己增加

脚本常用执行方式

  1. 输入脚本的绝对路径或相对路径

    需要该脚本的执行权限

  2. sh 脚本.sh
    

    这样不需要执行权限

    需要cd跳转到存放sh脚本文件的目录下才可使用

Shell变量

Shell变量介绍

  1. Linux的Shell中变量分为,系统变量用户自定义变量

  2. 系统变量:\(HOME**,**\)PWD\(SHELL**,**\)USER等等

  3. 显示当前shell中所有变量

    set
    

Shell用户自定义的变量

基本语法(在 xxx.sh 文件内)

  1. 定义变量
变量=值
  1. 输出变量
echo $变量

输出变量为 $变量名

即使是 echo "A=$A",shell也会将 $变量名 这种格式的认为是变量而不是字符串

必须 变量=值 之间不能存在空格!

  1. 撤销变量
unset 变量名
  1. 声明静态变量

静态变量不会被反复定义和初始化

静态变量一旦定义就无法unset了

readonly 变量名=值

Shell变量的定义规则

  1. 变量名可以由,字母数字下划线组成,不能以数字开头
  2. 等号俩侧不能有空格!
  3. 变量名一般为大写

将指令返回的结果赋值给变量

A=`命令`
A=$(命令)

命令上面是 反引号!在tab键上面一个键

设置环境变量

基本语法

	将shell变量输出为环境变量
  1. 让这个变量可以在其他文件中使用。

  2. 设置环境变量必须在 /etc/profile 文件内

  3. 这个文件也设置jdc等环境变量

  4. 设置环境变量后需要 source 才能让配置生效

  1. export 变量名=变量值
    

    让修改后的配置信息立即生效

  2. source 配置文件
    

    查询环境变量的值

  3. echo $变量名
    

位置参数变量

假设我们输入命令

./hello.sh 100 200 300

要想让shell脚本文件获取到这个 100 200 300数据,就可以使用位置参数变量了

基本语法

  • $n
    1. n为数字
    2. $0 代表命令本身,$1~$9 代表第一个到第9个参数
    3. 10以上的参数用 ${10} 这样写
  • $*
    1. 这个表示所有参数
    2. $*把所有参数当成一个整体
  • $@
    1. 这个表示所有参数
    2. $# 把所有参数区分当成个体看呆
  • $#
    1. 这个代表所有参数的个数

预定义变量

就是shell设计者事先定义好的变量,可以直接在shell脚本中使用。

基本语法

  • \[ 当前进程的进程号 \]

  • $? 最好溢出执行的命令的返回状态,如果这个变量值为0,证明上一个命令正确执行,否则就不正确执行

路径 &

这种方式可以让程序在后台执行

运算符

基本语法

$((运算表达式))

expr m + n

$[运算式]

如果要将expr的运算表达式赋给变量,需要用反引号将其包含起来

expr中符号的用法:

\* 乘

/ 除

% 取余

m + n 在expr中需要存在空格!

条件判断

判断语句基本语法(双分支)

if [ 判断条件 ]
then
	条件为true执行的语句
else
	条件为flase执行的语句
fi

简写法:

[ 判断条件 ] && 条件为true执行语句
  1. 判断条件前后要有空格

  2. if 和条件之间需要空格

  3. [ ]返回false(有空格!)

  4. [ dwadwa ]返回true

  5. 0为true ,>1 为false

常用判断条件

在前面加上 ! 即为否定

比如 ! -f 文件不存在

  1. 字符串之间比较

    =

    if [ 字符串1 = 字符串2 ]
    
  2. 俩个整数的比较

    if [ 1 -lt 2 ]
    
    符号 描述
    -lt 小于
    -le 小于等于
    -eq 等于
    -gt 大于
    -ge 大于等于
    -ne 不等于
  3. 按照文件权限判断

    if [ 选项 文件路径 ]
    
    符号 描述
    -r 有读的权限
    -w 有写的权限
    -x 有执行的权限
  4. 按照文件类型进行判断

    if [ 符号 文件路径 ]
    
    符号 描述
    -f 文件存在且是一个常规文件
    -e 文件存在
    -d 文件存在且是一个目录

流程控制(多分支if)

基本语法

if [ 条件判断 ]
then
	代码
elif [ 条件判断 ]
then
	代码
...
fi

流程控制(case语句)

基本语法

case $变量名 in
"值1")
	代码1
;;
"值2")
	代码2
;;
.....
*)
	最终情况
;;
esac

循环

for循环

基本语法1

for 变量 in 值1 值2 值3...
do
代码
done

举例:

for i in $*
do
	echo "num is $i"
done

输入10 11 12

输出 num is 10 11 12

因为$*是把位置参数当成整体

for i in $@
do
	echo "num is $i"
done

输入10 11 12

输出

num is 10

num is 11

num is 12

因为$@是把位置参数当成了个体

基本语法2

for((初始变量;循环条件;变量变化))
do
代码
done

举例

从1加到100的值输出显示

SUM=0				#给SUM变量初始化
for((i=1;i<=100;i++))			
do
	SUM=$[$SUM+$i]	#运算符,这里的SUM不加美元符号是因为这里是给SUM赋值
done
echo "$SUM"

while循环

需要注意的是条件判断前后需要空格

while 和条件之间也需要空格

且这里的条件和for里面循环条件不同,这里的循环条件要用if里面的规则!

基本语法

while [ 条件判断 ]
do
程序
done

举例

从1加到n的值

SUM=0
i=0
while [ $i -le $1 ]
do
	SUM=$[$SUM+$i]
	i=$[$i+1]
done
echo "SUM=$SUM"

read读取控制台输入(相当于scanf,Scanner这种)

基本语法

read (选项) (参数) 接受值得变量

选项

-p 指定读取值时的提示信息

-t 指定读取值的等待时间,如果未在规定时间输入就不等待

举例

read -p "请输入一个值num=" NUM

其中NUM1是接受从控制台输入值的变量

-p 后面的内容是从控制台等待读取值的时候的提示信息

这个相当于scanf("请输入一个值num=%d",$NUM1)

read -t 10 NUM2

等待10s如果10后没有获取到数值就停止等待

结合起来写法

read -p 参数 -t 参数 接受值变量

函数

shell编程有系统函数和自定义函数俩种。

系统函数

常用几个系统函数!多的自己查=-=

basename

功能:返回完整路径最后 / 的部分,常用于获取文件名

基本语法

basename 文件路径 文件后缀

basename会删除掉所有的前缀包括最后一个 '/' 字符,然后将字符串显示出来

举例

basename /home/aaa/text.txt			这样会返回 text.txt 这个字符串
basename /home/aaa/text.txt .txt	这样会返回 text 这个字符串

dirname

功能:返回完整路径最后 '/' 的前面部分,常用于返回路径部分

基本语法

dirname 绝对路径

举例

dirname /home/aaa/bbb/a.txt		这样返回 /home/aaa/bbb 这个字符串

自定义函数

基本语法

function 函数名()
{
	代码块;
	return $变量  #如果不需要返回值就可以不写return
}

调用方法

函数名 值1 值2 值3....

自定义函数的括号里面不需要加形参!

在自定义函数内部的 $1,$2是形参,代表的是

函数名 值1 值2 值3

$1是值1,$2是值2

一般的我们会在调用函数后使用 $? 来调用结果

但是这个只能获取到0到255之间的数

常用几种写法

写法1

function add()
{
	s=$[ $1 + $2 ]
	retrun $s
}
read -p "第一个值" a
read -p "第二个值" b
add $a $b
echo $? 	#前面一条命令执行的结果代码,这个结果代码只能返回0--255

解决return只能返回0~255的方法

举例:

function add()
{
	s=$[ $1 + $2 ]		#这里的1和2是形参,代表a,b的值
	echo $s		#打印输出s的变量值
}
read -p "第一个数=" a
read -p "第二个数=" b
sum=$(add $a $b)	#打印输出的值赋给sum变量!
echo $sum

局部变量

一般用于定义局部变量,用于函数体内,作用域为定义位置开始到函数结束

local 变量名=值

这样定义的是局部变量

标签:文件,shell,变量,--,语法,read,Linux,变量名
From: https://www.cnblogs.com/wdadwa/p/Linux_Learning_11.html

相关文章

  • 关于input 内容改变的触发事件
    转自:https://blog.csdn.net/qq_36908872/article/details/115528600  https://blog.csdn.net/weixin_45947938/article/details/122405448 方便以后自己寻找资料更加方......
  • 形成性评价在增强现实(AR)中对建筑学课程泛在学习活动的影响
    形成性评价在增强现实(AR)中对建筑学课程泛在学习活动的影响(Effectsofformativeassessmentinanaugmentedrealityapproachtoconductingubiquitouslearningact......
  • vue3新语法糖——setup script
    前言vue3上线已经很久了,许多小伙伴应该都已经使用过vue3了。那么在使用vue3compositionAPI的时候有没有觉得整个过程会比较繁琐呢。比如当你定义了一个方法,然后发现模......
  • git推送报错:你的推送将发布一个私人电子邮件地址解决方案记录
    本地新建分支且已经切换到新分支 使用 gitpush远程库名 分支名  命令推送后报错如下:  重点看红框信息,翻译一下就是你将要发布一个私人邮箱地址,先百度找了......
  • 2022-2023-1 20221417 《计算机基础与程序设计》第四周学习总结
    学习目标·门电路·组合电路,逻辑电路·冯诺依曼结构·CPU,内存,IO管理·嵌入式系统,并行结构·物理安全学习资源·教材·阅读「反作弊」:任何时候发现同学们有抄袭作......
  • Nacos集群启动报错: nested exception is org.springframework.boot.web.server.WebS
    Nacos的 cluster.conf文件集群配置`127.0.0.1:8845``127.0.0.1:8846``127.0.0.1:8847`application.properties文件的配置##Copyright1999-2018AlibabaGroupH......
  • GPIO
     一、前言GPIO全称General PurposeInputOutput 即通用输入/输出,其实GPIO的本质就是芯片的一个引脚,通常在ARM中所有的I/O都是通用的。不过由于每个开发板上都会设计......
  • docker compose最全文档
    1.dockercompose安装#自动sudoyumupdatesudoyuminstalldocker-compose-plugindockercomposeversion#手动安装DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.doc......
  • CSP2021括号序列
    [CSP-S2021]括号序列题目描述小w在赛场上遇到了这样一个题:一个长度为\(n\)且符合规范的括号序列,其有些位置已经确定了,有些位置尚未确定,求这样的括号序列一共有多少......
  • 第一次博客----markdown语法学习
    markdown语法学习字体样式粗体helloword!斜体helloword!粗斜体helloword!字体添加删除线helloword!引用20世纪初的一天,圣诞节快到了,......