Linux的Shell脚本详解


  

一、什么是 Shell 脚本文件 ?

  Shell脚本就是命令解析器,包含一系列命令序列的文本文件。当运行这个脚本文本时,文件中包含的命令序列将得到执行。
   如果我们有一系列经常使用的 Linux 命令,我们可以把它们存储在一个文件中。Shell 可以读取这个文件并执行其中的命令。这样的文件被称为脚本文件。

例如:
run.sh

#!/bin/bash
ls
pwd
cd ..
touch hello.c

二、编写Shell脚本

1. 基本规则

(1)脚本文件命名的后缀必须是.sh
(2)Shell脚本内容的第一行必须是#!/bin/bash,这一行不是注释而是 shell 脚本的标识,表明这是一个脚本文件。
(3)脚本文件里以#作为语句的注释。
(4)使用echo 输出内容。
(5)使用cat 查看文件内容。

2. shell 变量

shell 变量没有数据类型,都是字符串,即使数值也是字符串。

变量使用

(1)创建变量

命令: 变量名称=值。 等号两边不能有空格!如果值有空格则必须用""或者’’引用起来。

#!/bin/bash
a=10
b=" 10"
readonly c=3 #只读变量,不可修改

(2)引用变量

命令:$变量名。以下三种引用变量的方式等价。

#!/bin/bash
a=10
echo $a
echo ${a} 
echo "${a}"

运行脚本:输出三行 10

(3)删除变量

命令:unset 变量名

#!/bin/bash
a=10
unset a  
echo $a

因为中间删除了变量,所以不会输出任何东西。

(4)从键盘读取变量

命令:read 变量。允许用户从键盘输入,实现程序交互。

#!/bin/bash
echo "please input the first number:"
read a
echo "This number is: $a"

变量类型

(1)特殊变量

在这里插入图片描述

a.sh

#!/bin/bash
echo $1
echo $2
echo $3
echo $0
echo $#
echo $@
echo $*
echo $?
echo $$
echo "finally"

在这里插入图片描述

(2)系统/环境变量

系统预定义的变量,一般在/etc/profile 中进行定义。使用env查看所有系统变量。
HOME :用户主目录 PATH 文件搜索路径。
PWD :用户当前工作目录。
PS1、PS2 :提示符。
LOGNAME:指登录主机的用户名称;
HOSTNAME :主机名字,也就是这个系统的名字。
USER:指目前环境使用者的名称。等等…还有其他的系统变量。

(3)全局变量

export 变量名,把 变量变为全局变量。
变为全局变量后,就可以在多个文件里使用该变量。
在这里插入图片描述

3. 重定向符

在这里插入图片描述
使用重定向符时,文件不存在则自动创建文件。

#!/bin/bash
echo hello > 1.c #将 hello 输入到 1.c文件里
cat < 1.c > 2.c #从1.c文件里获取内容,输出到2.c文件里
cat 2.c #查看2文件里的内容

4. 管道 ‘ | ’

   管道操作符|用于连接左右两个命令,将|左边的命令执行结果(输出)作为|右边命令的输入。

5. 单双引号

' '" "的区别:
单引号:消除所有字符的特殊意义。
双引号:消除除了$、" " 、’ ’ 三种以外其它字符的特殊意义。

#!/bin/bash
a=10
echo ${a}     #输出:10
echo "${a}"   #输出:10
echo '${a}'   #输出:${a}

5. grep搜索匹配

命令:grep [选项] 搜索字符 在哪个文件搜索(文件名)

选项作用
- i忽略大小写,不区分大小写地匹配模式。
- r递归地搜索目录及其子目录下的文件。
- l只打印包含匹配模式的文件名,而不打印匹配的行。
- n打印匹配行的行号。
- v反转匹配,只打印不匹配模式的行。
- w仅匹配整个单词,而不是部分匹配。
- c打印匹配模式的行数统计。

举例:1.txt 内容如下

"hello world"
"this is a test"

使用命令:grep "hello" 1.txt
在这里插入图片描述

6. 运算符

在这里插入图片描述

#!/bin/bash

VAR=2 
test $VAR -gt 1 
echo $?


VAR1=3 
[ $VAR1 -gt 1 ]    #中括号两边必须要有空格
echo $? 

6. 数组

(1)数组的定义
方式1: a=(1 2 3 4 5) ,各个数据之间用空格隔开。
方式2: a[0]=1; a[1]=2; a[2]=3
方式3: a=([1]=1 [2]=2)

(2)数组的引用
在这里插入图片描述
举例:

#!/bin/bash

a=(2 5 7 10)
echo ${a[2]} #输出下标为 2 的数据
echo ${#a[*]} #输出数组的长度
echo ${a[@]:2} #截取下标从 2 到最后
echo ${a[@]:1:2} #截取从下标 1 后面 2 个

7. if 语句

注意:在使用if语句时,将ifthen放在不同行,如同行放置,则 if 语句必须要;结束。

#!/bin/bash

#方式一
if [ $USER == "slef" ]
then
	echo $USER
fi

#方式二
if [ $PWD == "/home/slef/" ];then
	echo $PWD
fi

#方式三
if [ $PWD == "/home/slef/" ];then
	echo "HOME $PWD"
elif [ $PWD == "/mnt/hgfs/share/5.shell/3" ]
then
	echo "SHARE $PWD"
else
	echo "else"
fi

8. case语句

#!/bin/bash

case $1 in
	"y")
		echo inputed y
		;;
	"n")
		echo inputed n
		;;
	*)
		echo "inputed *"
		;;
esac

9. for循环

#!/bin/bash

#方式一
for i in 1 2 3 4 5
do
	echo $i
done

#方式二
for ((i=0;i<5;i++))
do
	echo $i
done

#方式三
for i in /etc/*
do
	echo $i
done

10. while语句

#!/bin/bash

var=0
while [ $var -ne 10 ]
do
	echo $var
	var=$(($var+1))
done

11. until 语句

#!/bin/bash

myvar=0
until [ $myvar -eq 10 ]
do
	echo $myvar
	myvar=$(($myvar+1))
done

12. Shell 函数

#!/bin/bash

func()
{
	echo "hello world"
	echo $0
	echo $1
	return 255
}

func 12 33
exit 0
echo $?

  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Shell脚本是一种用于编写和执行命令的脚本语言。在Linux中,有多种Shell命令解析器可供选择,常见的有Bourne Shell(/usr/bin/sh或/bin/sh)、Bourne Again Shell(/bin/bash)、C Shell(/usr/bin/csh)、K Shell(/usr/bin/ksh)和Shell for Root(/sbin/sh)等。\[2\] 在编写Shell脚本文件时,通常需要在文件的最前面添加一行指定解析器的声明,例如#!/bin/bash。这是因为Linux中存在多种解析器,它们之间的语法可能有所不同,通过添加这一声明可以确保使用指定的解析器来执行脚本。\[3\] 在Shell脚本中,可以使用source命令或点号(.)来加载另一个脚本文件。这两种方式都是将指定的脚本内容加载到当前脚本中,并由同一个Shell进程来执行。与之相反,使用sh命令调用另一个脚本会创建一个新的Shell进程来执行,导致父进程中的变量无法在子进程中访问到。\[1\] 总结来说,Shell脚本是一种用于编写和执行命令的脚本语言,可以使用不同的Shell命令解析器来解析和执行脚本。在编写脚本时,需要在文件的最前面添加解析器声明,以确保使用指定的解析器。同时,可以使用source命令或点号(.)来加载另一个脚本文件,而使用sh命令会创建一个新的Shell进程来执行脚本。 #### 引用[.reference_title] - *1* *2* *3* [Linux脚本shell详解](https://blog.csdn.net/footless_bird/article/details/123698139)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值