Linux系统学习——shell编程入门篇学习

Linux 系统学习——shell编程入门学习

一、介绍:

1. shell是一个作为用户和linux系统间接口的程序,允许用户向操作系统输入需要执行的命令

2、执行脚本:

1、./文件名 
2、sh 文件名 
3、#source 文件名

3、在shell上 # 为注释

4、每个shell程序需要写在 #!/bin/sh 开始 ,相当于头文件 ,这是对shell声明

简单书写 :

#!/bin/sh	//必须要带上这个 shell 声明
A="hello"	// 这里不能 A = "hello" , 带有空格的话会识别错误
echo "A is"
echo $A

在这里插入图片描述

注意:shell 在解释命令时的原则是第一个符号标记只能是程序或者命令,有空格的时候第一个符号标记就是“A”,当然就不成立了,而没有空格的时候,第一个标记是A=“hello world” ,shell 将解释为变量赋值指令,因此可以通过。

5、 文件结束后缀:

Linux :\n 为回车换行  

windows : \r\n 为回车换行

二、重定向 > 或 >> 解析:

以 ll > aa 为例子

> 作用是 把 ll 内容写进 aa文件里头,但是里头原来的文件内容会被删除掉

Linux系统学习——shell编程入门篇学习_第1张图片

>> 作用是把 ll 内容写进 aa文件里头,但是里头原来的文件内容不会被删除掉,重新另外换行添加内容

管道 :|

ll | grep "s" // 通过管道 | ,查看 ll 下 含有 s 的内容

三、环境变量、系统变量 :

环境变量:

Linux系统学习——shell编程入门篇学习_第2张图片

系统变量:

Linux系统学习——shell编程入门篇学习_第3张图片

演示bb.sh:

#!/bin/sh
echo $0
echo $#	
echo $1
echo $2
echo $3

Linux系统学习——shell编程入门篇学习_第4张图片

四、shell 常用Linux 指令 :

Linux系统学习——shell编程入门篇学习_第5张图片

以 mv 为例子 :

在这里插入图片描述

键盘输入功能实现 (read):

#!/bin/sh
A=10
echo $A	// 先打印 A =10 值
read A	//从键盘读入数据
echo $A

结果 :

在这里插入图片描述

五、语法结构

(1)条件判断:

if else

使用模式一:

#!/bin/sh
if test -f a.sh #如果成立就执行then
then            #一定要加
echo "sucess"
        
else    
echo "failed"
fi      #一定要加结束符号

在这里插入图片描述

常用这种:

#!/bin/sh
if [ -f a.sh ] // 格式 [  ] 左右两边都要一个空格
then
echo "yes"
else
echo "no"
fi

注意:

使用[ ]时,必须要在 [符号和被检查的条件之间留出空格,可以把符号看作和test样,test和后面的条件之间总是有一个空格。
代码最后不要忘了写 fi 来结束这个判断

Linux系统学习——shell编程入门篇学习_第6张图片
Linux系统学习——shell编程入门篇学习_第7张图片

#!/bin/sh
echo "please scanf you data,answr is yes or no"

read data
if [ $data = "yes" ]
then
        echo "good"
else
        echo "Fuck"
fi

在这里插入图片描述

多重条件 如c语言中的 if () else if () else :

#!/bin/sh
if [ 10 -lt 2 ]	//如果 10 小于 2 ,才打印 good
then
        echo "good"
elif [ 10 -gt 5 ]	// 如果 10 大于5 ,打印 well
then
        echo "well"
else
        echo "NO"
fi

在这里插入图片描述

Linux系统学习——shell编程入门篇学习_第8张图片

#!/bin/sh
if [ 3 -eq 4 ]
then
echo "yes"
else
echo "no"
fi

在这里插入图片描述

Linux系统学习——shell编程入门篇学习_第9张图片

#!/bin/sh
if [ -d b.txt ]
then
echo "yes"
else
echo "no"
fi

在这里插入图片描述

(2)循环判断:

1、for循环 :

Linux系统学习——shell编程入门篇学习_第10张图片

#!/bin/sh
echo "please input data"
for data in 1 2 3
do
        echo $data
done

Linux系统学习——shell编程入门篇学习_第11张图片

2、while循环

#!/bin/sh
echo "input data"
#data=1
read data	//从键盘输入data
while [ $data != 6 ]	// 从键盘 输入data ,判断data 是否不等于 6
do
        echo "again"
echo $data
data=$(($data+1))	// data 依次相加 ,类似于C 语言中 data++
done	//循环必带 结束符
exit 0	

Linux系统学习——shell编程入门篇学习_第12张图片

3、until :当满足循环条件的时候,直接跳出循环。而 while 循环是满足循环条件,继续执行循环条件里面的语句

#!/bin/sh
echo "input data"
data=5
until [ $data -le 6 ]
do
        echo $data
        data=$(($data+1))
done
echo "跳出循环"
exit 0

跳出循环,没有执行循环里面打印 data的值

在这里插入图片描述

(3)选择语句(相当于c语言swich):

Linux系统学习——shell编程入门篇学习_第13张图片

#!/bin/sh
echo "请输入数据"
read data
case "$data" in
        yes) echo "good";;	#注意一定要两个 ;; 结尾
        y) echo "nice";;
        no) echo "fuck";;
        n) echo "shift";;
esac	# 选择语句必带
exit 0

Linux系统学习——shell编程入门篇学习_第14张图片

注意每个模式都以 双分号 ;; 结尾,因为你可以在前后模式之间放置多条语句,所以需要使用一个双分号来标记前一个语句的结束和后一个语句的开始

(4)函数( 直接函数名字+() 来使用 )

Linux系统学习——shell编程入门篇学习_第15张图片

#!/bin/sh
foo()	// 函数名字 + ()
{
        echo $0	 # 打印文件名字
        echo $1	 # 打印第一个参数
        echo $2	 # 打印第二个参数
}
echo $0 $1 $2 
foo  $1 $2   # 这里要给foo 函数 传参数 才会打印 $1 、$2

在这里插入图片描述

  • 如果要在shell函数中声明局部变量,则要使用local关键字,局部变量的作用域则局限在函数范围内。
  • 此外,函数还可访问全局作用范围内的其他shell变量。如果全局变量和局部变量出现了同名,则局部变量会覆盖全

例子:

#!/bin/sh
A="good"
foo()
{
local A="nice"
echo $A
}
echo "局部变量local作用:"
foo
echo "全局变量:"
echo $A
exit 0

Linux系统学习——shell编程入门篇学习_第16张图片

(5)无限循环 指令 冒号 (:)

冒号(:)是一个空命令,它偶尔会被用于逻辑简化,相当于true的一个别名,由于它是内置命令,所以它的运行效率要比true高

while : 相当于while true

#!/bin/sh
fun()
{
        while :
        do
                echo "gg"
        done
}
fun
exit 0

Linux系统学习——shell编程入门篇学习_第17张图片

(6)break 跳出循环

#!/bin/sh
A=10
B=15
while [ $A -ne $B ]
do
        A=$(($A+1))
        if [ $A -eq "12" ]	# 当 A = 12时 跳出循环
        then
                echo "good"
        break; # 这个 ; 可加可不加
        fi
done
exit 0

在这里插入图片描述

(7)函数返回值 return (在shell脚本,0表示返回成功,相当于 c语言的 1)

#!/bin/sh
yes_or_no()
{
 echo "is your name $*?"
 while true
 do
  echo "please enter yes or no"
  read a
  case "$a" in
  y|yes) return 0;;	# 在shell脚本,0表示返回成功,相当于 c语言的 1
  n|no) return 1;;
  *  ) echo "error"
  esac
  done
}

echo "original parameters are $*"
 if yes_or_no "$A" # shell脚本编程中,注意:Linux中返回0表示成功
then				# $A 用一个变量 A 来存放返回值,用其他字符也可以
   echo "hi"
else
  echo "never mind"
fi
exit 0

Linux系统学习——shell编程入门篇学习_第18张图片

(8)continue命令(和c语言功能差不多):

#!/bin/sh
rm -rf fred*
echo > fred1
echo > fred2
mkdir fred3
echo > fred4
for file in fred*
do
if [ -d "$file" ]
then
echo skipping the directory $file
continue
fi
done
echo first direcyory starting fred was $file
rm -rf fred*

在这里插入图片描述

(9)exec命令:

将当前的shell替换为一一个不同的程序
exec wall"hello world"
将当前的shell替换为执行wall,exec后面的语句都不会执行了,因为当前的shell已经不复存在了

代码演示 :

#!/bin/sh
echo "lulu"
exec echo "hengheng"
echo "aa"
echo "bb"

在这里插入图片描述

你可能感兴趣的:(树莓派,Linux系统学习,shell)