Shell——脚本语言入门

1、基础知识

什么是shell?

功能定位

在计算机科学中,Shell就是一个命令解释器。 shell是位于操作系统和应用程序之间,是他们二者最主要的接口,shell负责把应用程序的输入命令信息解释给操作系统,将操作系统指令处理后的结果解释给应用程序。

  • 一句话,shell就是在操作系统和应用程序之间的一个命令翻译工具。
    在这里插入图片描述
    分类
类型说明
图形界面shell图形界面shell就是我们常说的桌面
命令行式shellwindows系统:cmd.exe 命令提示字符 linux系统:sh / csh / ksh / bash / …

我们常说的shell是命令行式的shell,在工作中常用的是linux系统下的bash。

查看效果

查看当前系统的shell类型(打开Ubuntu的终端其实就是默认在/bin/bash环境下)

echo $SHELL

在这里插入图片描述

查看当前系统环境支持的shell

在这里插入图片描述

更改默认的shell(执行完需重启Ubuntu才能生效)

chsh <用户名> -s <新shell>
shell的使用方式
  • 手动方式:即在终端界面,输一行命令,运行一行命令
  • 脚本方式:将命令写入脚本文件,批量执行(自上而下)
shell脚本文件(以1.sh脚本文件为例)的三种执行方式
  1 #!/bin/bash
  2 # 第一行注释表示声明当前脚本运行使用的解释器
  4 ls
  5 pwd
  6 whoami
  7      
  • 1、显示指定的解释器运行/bin/bash 1.sh
  • 2、直接运行脚本./ 1.sh
    前提:脚本文件有可执行权限,和脚本文件中声明执行的解释器
python@ubuntu:~/Desktop/data$ ./1.sh
1.sh
/home/python/Desktop/data
python

  • 3、使用source. 的方式运行脚本source 1.sh . 1.sh
    注意:脚本文件执行使用的解释器的优先级——就是上述的1——3的顺序
shell脚本的注释方式
  • 单行注释: # 号开头
  • 多行注释::<< + 一对边界符号(//、$$、!! 都行)
<<$
...
...
$
1.3 变量基础

分类

shell 中的变量分为三大类:

分类作用
本地变量变量名仅仅在当前终端有效
全局变量(环境变量)变量名在当前操作系统的所有终端都有效
shell内置变量shell解析器内部的一些功能参数变量
1.4、变量详解

常用方式,打印变量
在这里插入图片描述

1.4.1、本地变量
(1)普通变量

 1 #!/bin/bash
  2 # 第一行注释表示声明当前脚本运行使用的解释器
  3 
  4 name=cfw
  5 
  6 # 如果变量值有空格,必须加双引号,不能加单引号
  7 content="my name is $name"
  8 
  9 echo $name                   

(2)命令变量
命令(常指linux命令)变量的定义方式有如下两种

类型样式特点
反引号变量名=命令反引号
小括号变量名=$(命令)$()

执行流程:
①将命令用反引号括起来,保存到一个变量中

python@ubuntu:~/Desktop/data$ name=`whoami`
python@ubuntu:~/Desktop/data$ echo $name
python

②将命令用括号括起来,保存到一个变量中

python@ubuntu:~/Desktop/data$ name=$(whoami)
python@ubuntu:~/Desktop/data$ echo $name
python

(3)环境变量(全局变量)
概念:在当前系统的所有环境下都能生效的变量,可以用env命令查看系统所有的环境变量
作用

  • 给应用程序的运行,提供一些必要的参数
  • 方便各个脚本文件之间进行传值

三种位置定义环境变量

  • (1)在终端中定义export 变量=值

  • (2)在脚本文件中定义export 变量=值
    定义完需使用source <脚本文件>或者. <脚本文件>运行后才能生效【注意:使用/bin/bash <脚本文件>执行不会生效】

  • (3)在隐藏文件.bashrc中定义,定义完需要和上面一样source运行一下(或者重启终端),可以在所有终端生效。上面两种方式只是在当前终端生效。

第三种方法示例:
将自己写的一个脚本配置到环境变量。以后我们在任意一个路径下都可以直接输入redis.sh进行执行。
在这里插入图片描述

补充:取消一个变量unset 变量名

(4)内置变量

属性含义

符号意义符号意义
$0获取当前脚本文件名$n获取脚本的第n个参数值
$#获取脚本参数的总个数$?获取上一个指令的状态返回值(0为成功,非0为失败)

1.4.5、变量计算

shell脚本的变量都是字符类型,但也支持简单的整数运算。

# 方案一:let语法
num1=100
num2=200
let num3=num1+num2

# 方案二:$(())语法
num3=$((num1+num2))
1.5、条件表达式
<think>嗯,用户想学习Shell脚本中函数的基础用法,需要入门教程和使用方法。首先,我得回忆一下Shell函数的基本结构。记得函数定义有两种方式,一种是用函数名后接括号,另一种是用function关键字。比如function_name() { ... }或者function function_name { ... }。这点在引用[1]里提到过,对吧? 接下来,用户可能需要知道如何调用函数。调用函数就像执行普通命令一样,直接写函数名就行。参数传递的话,和脚本参数类似,用$1、$2这些位置参数来获取。比如调用时写myfunc arg1 arg2,函数内部用$1获取arg1的值。对了,返回值部分需要注意,Shell函数默认返回最后一条命令的退出状态码,可以用return指定0-255的数值。但如果有需要返回数据的话,可能需要用全局变量或者输出到标准输出,然后通过命令替换获取。引用[2]提到了避免返回过多参数的错误,应该和返回值处理有关。 然后,作用域的问题。Shell函数内的变量默认是全局的,除非用local声明为局部变量。这点很重要,不然可能会不小心修改到全局变量。比如在函数里写local var=123,这样变量只在函数内有效。引用[4]提到函数的本质是可重复使用的脚本代码,所以变量作用域的正确使用能避免很多问题。 还有函数的保存和复用。用户可能希望把常用的函数放在库文件里,然后在其他脚本中通过source或者点操作符引入。比如. ./myfuncs,这样就能使用库里的函数了。引用[3]里提到了source命令和点操作符的使用,这点需要强调一下。 实际案例的话,可能需要举几个例子。比如一个打印欢迎信息的函数,或者计算两数之和的函数。还有参数传递的例子,比如判断文件是否存在并输出结果的函数。这些例子能帮助用户理解如何定义和调用函数。 常见问题部分,用户可能会遇到参数传递错误、返回值范围不对,或者变量作用域的问题。需要提醒他们检查参数个数,使用return时别超过255,以及用local声明局部变量。 总结一下,应该分步骤讲解:定义、调用、参数、返回值、作用域、库的使用,然后给出例子和常见问题。这样结构清晰,用户能一步步跟着学。同时要确保引用的资料正确,比如引用[1]到[4]的相关内容都要对应上。可能还需要检查LaTeX格式是否符合要求,不过问题里没有数学公式,暂时不用处理。最后生成相关问题,比如如何传递参数、返回值处理、作用域问题、创建函数库以及调试技巧,这些都能帮助用户进一步学习。</think>### Shell脚本函数入门教程 #### 一、函数定义 Shell脚本中定义函数有两种格式: 1. **标准格式** ```shell function_name() { # 函数体 commands } ``` 2. **带`function`关键字** ```shell function function_name { # 函数体 commands } ``` 例如定义一个打印欢迎信息的函数: ```shell welcome() { echo "Hello, $1!" } ``` [^1] --- #### 二、函数调用 直接通过函数名调用: ```shell welcome "Alice" # 输出:Hello, Alice! ``` 带参数的调用方式与脚本参数类似,通过`$1`、`$2`等获取参数: ```shell sum() { result=$(($1 + $2)) echo $result } sum 3 5 # 输出:8 ``` --- #### 三、返回值与作用域 1. **返回值** - 默认返回最后一条命令的退出状态码(0表示成功,非0表示失败) - 使用`return`显式返回状态码(范围0-255): ```shell check_file() { if [ -f "$1" ]; then return 0 else return 1 fi } check_file "test.txt" ``` - **返回数据**需通过全局变量或标准输出: ```shell get_date() { echo $(date +%F) } today=$(get_date) ``` 2. **变量作用域** - 默认所有变量为全局变量 - 使用`local`声明局部变量: ```shell demo() { local var="局部变量" global_var="全局变量" } ``` [^2][^4] --- #### 四、函数库的使用 将常用函数保存到独立文件(如`myfuncs.sh`)并通过`source`加载: ```shell # 加载库文件 source ./myfuncs.sh # 或使用点操作符 . ./myfuncs.sh ``` 之后可直接调用库中的函数[^3]。 --- #### 五、实际案例 **案例1:文件备份函数** ```shell backup_file() { if [ ! -f "$1" ]; then echo "错误:文件不存在" return 1 fi cp "$1" "$1.bak" echo "备份完成:$1.bak" } backup_file "data.txt" ``` **案例2:数学计算** ```shell calc() { case $2 in "+") echo $(($1 + $3));; "-") echo $(($1 - $3));; *) echo "不支持的操作符" esac } calc 5 "+" 3 # 输出:8 ``` --- #### 六、常见问题 1. **参数传递错误**:确保参数数量与函数内部使用的`$1`、`$2`匹配 2. **返回值越界**:`return`的值必须在0-255之间 3. **变量污染**:忘记使用`local`声明局部变量
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值