shell学习笔记

本文介绍了Shell的基础知识,包括Shell的定义、解析器及常见的bash。详细讲解了如何执行Shell脚本,如输出hello world、读取用户输入以及将输入写入文件。还涵盖了Shell中的变量、运算符、流程控制(if、for、while)以及函数的使用。通过实例展示了各种操作,是学习Shell脚本的良好起点。
摘要由CSDN通过智能技术生成

1.Shell是什么

  • Shell的中文意思是贝壳,可以理解为linux内核的一层壳,用户可以利用这层壳来访问操作系统的服务。
  • Shell是一个命令行解释器,它为用户提供了一个向 Linux 内核发送请求以便运行程序的界面系统级程序,用户可以用 Shell 来启动、挂起、停止甚至编写一些程序。
  • Shell 处在内核与外层应用程序之间,起着协调用户与系统的一致性、在用户与系统之间进行交互的作用。下图是 Linux 系统层次结构图,Shell 接收用户输入的命令,并把用户的命令从类似 abed 的 ASCII 码解释为类似 0101 的机器语言,然后把命令提交到系统内核处理;当内核处理完毕之后,把处理结果再通过 Shell 返回给用户。
    在这里插入图片描述

2.Shell解析器

  • linux系统支持多种shell解析器
    cat /etc/shells
    在这里插入图片描述
  • 其中重要的就是sh和bash,笔者的电脑使用的是centos7,而centos默认的shell解析器就是bash。
    sh和bash的区别,就是bash在sh的基础上增加、增强了很多特性,bash是兼容sh的,相当于sh是bash的“子集”。

3.执行Shell

  • shell脚本默认文件扩展名为.sh,命令行下输入,也可以保存成shell脚本文件运行。
  • 如果需要执行的命令简单并且不需要重复使用,可以命令行输入直接执行。复杂且需要重复使用的命令就写成脚本,写入的内容,会默认当成一条命令来执行。

3.1 输出helloworld

  • vim test.sh建立脚本文件,内容如下
#!/bin/bash
echo 'hello world'

命令含义,第一行指定shell脚本的解释器,第二行执行echo命令输出文本。

  • 赋予可执行权限给test.sh,chmod 777 test.sh或者chmod +x test.sh ,执行./test.sh运行脚本
    在这里插入图片描述

  • 这与命令行中输入echo 'hello world’输出结果是一样的
    在这里插入图片描述

3.2 输入内容

read命令从输入流读取一个值并赋予input

#!/bin/bash
read input
echo $input

在这里插入图片描述

3.3 练习,将输入值写入到文件中

vim write.sh
#!/bin/bash
read input
cd /home
touch write.txt
echo $input >> write.txt

在这里插入图片描述

4.shell中的变量

4.1 常用的环境变量

环境变量作用
$PWD显示当前所在路径
$PATH命令所示路径,以冒号为分割
$SHELL显示当前shell类型
$USER打印当前用户名
$HOME打印home目录

读取变量:echo加上$变量名,可直接输出环境变量的值
在这里插入图片描述

4.2 自定义变量

  • shell变量和c语言差不多,名称可以由字母、数字和下划线组成,但是不能以数字开头。
  • shell变量名前不需要声明类型,变量后面不能有空格,如果变量的值有空格,需要用双引号或单引号括起来。
  • 等号两侧不能有空格,系统变量一般为大写。
    简单示例:
    在这里插入图片描述

4.3 变量作用域

Shell 变量的作用域可以分为三种:

  • 只能在函数内部使用叫做局部变量。
  • 可以在当前 Shell 进程中使用叫做全局变量。
  • 全局变量可以当前shell进程使用,对其他shell进程和子进程无效,如果使用export命令将全局变量导出,那么它就在所有的子进程中也有效了,称为环境变量。

示例:

#声明一个全局变量
#!/bin/bash
function func(){
    a=99
}
func
echo $a

运行脚本,输出99
在这里插入图片描述

# 声明一个局部变量
#!/bin/bash
function func(){
   local a=99
}
func
echo $a

运行脚本,输出空值
在这里插入图片描述

4.4 特殊变量

变量作用
$nn为数字,$0代表该脚本名称,$1-9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10}
$#获取所有输入参数个数,常用于循环
$@获取脚本或函数的所有参数,$*把所有的参数看成一个整体
$*获取脚本或函数的所有参数,$@得到所有参数都会被当成独立的参数
$?上个命令的退出状态,或函数的返回值
$$当前shell进程 ID,对于 Shell 脚本,就是这些脚本所在的进程 ID

5 运算符

5.1 基本运算

运算符作用
+、-、*、/、%加、减、乘、除、取余,需要结合expr命令
==、!=判断相等、判断不相等,需要使用 [ ]

代码测试:

#!/bin/bash
x=$1
y=$2
echo "输入值x=$x,y=$y"
var=`expr ${x} + ${y}`
echo "x+y=${var}"
var=`expr ${x} - ${y}`
echo "x-y:${var}"
var=`expr ${x} \* ${y}`
echo "x*y:${var}"
var=`expr ${x} / ${y}`
echo "x/y:${var}"
var=`expr ${x} % ${y}`
echo "x%y:${var}"
var=$[${x} == ${y}]
echo "x==y:${var}"
var=$[${x} != ${y}]
echo "x!=y:${var}"

#chmod 777 test.sh
#./test.sh 1 2
输入值x=1,y=2
x+y=3
x-y:-1
x*y:2
x/y:0
x%y:1
x==y:0
x!=y:1

5.2 关系运算

运算符作用
-eq等于,判断两个数是否相等
-ne不等于,判断两个数是否不相等
-gt大于
-lt小于
-ge大于等于
-le小于等于

6 流程控制

6.1 if语句

# 基本语法
if <condition>
then
    #do something
elif <condition>
then
    #do something
else
    #do something
fi
# 简略形式,把if和then放一起
if <condition> ; then
    #do something
elif <condition> ; then
    #do something
else
    #do something
fi

测试:

#!/bin/bash
x=$1
if [ $1 -gt "1" ]
then
        echo "${x}大于1"
elif [ $x -lt "1" ]
then
        echo "${x}小于1"
elif [ $x -eq "1" ]
then 
        echo "${x}等于1"
fi

在这里插入图片描述

6.2 for循环

# 基本语法
for <var> in [list] 
do
# do something
done
# 也可以这样
for((i=0;i<=100;i++))
do
# do something
done

测试:

#!/bin/bash
s=0
for i in $*
    do
        s=$[$s+$i]
        i=$[$i+1]               
done
echo $s

在这里插入图片描述

6.3 while循环

# 基本语法,和for循环差不多
while <condition>
do
    #do something
done

测试:

#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
        s=$[$s+$i]
        i=$[$i+1]
done
echo $s

在这里插入图片描述

7 函数

语法规则:function foo() { Action; return int; }

  • 使用function关键字来定义一个函数
  • 数有参数,调用时,在函数名后面写上参数,多个参数用空格隔开
  • 调用函数时传递参数,可$n的形式来获取参数的值
function foo(){
# do something...
}

测试:

function foo(){
    local month=$1
    local day=$2
    echo "今天是${month}${day}号"
}
foo 11 20

在这里插入图片描述

未完待续。。。

参考文章:http://c.biancheng.net/view/932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高并发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值