Linux笔记 | Shell编程(上)


00 什么是Shell编程

  • Shell编程是一种编写脚本的语言,可用于在Linux系统上执行自动化任务。
  • Shell编程是通过编写一系列命令来控制计算机的工作流程。
  • 它通常使用命令行界面(CLI)来与用户交互,并可以执行文件处理、文本处理、系统管理等任务。

01 Hello World!

下面是一个shell脚本内容,用于输出Hello World!

#!/bin/bash
echo "hello world!" # 我是一个注释
  • shell脚本是一个文本文件,第一行固定书写#!/bin/bash,表示用于执行脚本的工具为bash
  • shell脚本中,注释使用#开头
  • shell文件可以是任意后缀格式,建议以.sh结尾
  • 可使用文本编辑器编辑脚本内容,例如vim xxx.sh

02 Shell脚本的执行方式

2.1 设置可执行权限

shell脚本首次编辑完成后,需要为其赋予可执行权限,常用命令为:

  • chmod +x xxx.sh 表示给所有用户赋予该文件的可执行权限
  • chmod u+x xxx.sh 表示给root用户赋予可执行权限

2.2 执行方式一(局部)

  1. sh+相对路径 sh ./hello.sh
  2. sh+绝对路径 sh /root/hello.sh
  3. bash+相对路径 bash ./hello.sh
  4. bash+绝对路径 bash /root/hello.sh
    以下两种方式要求脚本文件需要有可执行权限
  5. 直接输入绝对路径执行 /root/hello.sh
  6. 直接输入相对路径执行./hello.sh

2.3 执行方式二(全局)

source ./hello.sh
等价
. hello.sh.后有空格)

2.4 修改环境变量设置为可直接执行

通常使用执行方式一中的第5或6的方式即可,即/root/hello.sh./hello.sh
如果想输入脚本名称就直接执行,将其当成命令一样使用,可以通过修改环境变量实现。
首先需要配置脚本目录,将所有想直接执行的脚本放在此目录下,然后修改$PATH变量,在其后添加脚本所在路径即可。
或者直接将脚本拷贝到/root/bin目录下即可。

03 变量

3.1 系统预定义变量

  • bash 开启子shell
  • 常用系统变量:
    • $HOME 当前的home目录
    • $PWD 当前的工作目录
    • $USER 当前用户
  • echo 查看环境变量
  • env 查看全局环境变量
  • ps -f 查看子shell情况
  • set 查看所有变量

3.2 自定义变量

  • 基本语法:变量名=变量值
    注意=两边不能有空格,变量值如果有空格需用双引号或单引号括起来

  • 撤销变量:unset 变量名

  • 声明静态变量:readonly 变量名=变量值
    注意:静态变量不能unset撤销

  • 将一个变量提升成全局变量:export 变量名
    注意:父shell全局变量影响子shell,但子shell全局变量不影响父shell

  • 查看变量值echo $变量名

  • 定义变量时进行运算:a=$[1+2]
    注意:环境变量名建议大写,bash中变量默认都是字符串类型,无法进行数值运算

3.3 特殊变量

  • $n

表示一个参数,其中n表示数字
$0表示该脚本名称
$1-$9表示第一至第九个参数
十以上的参数使用大括号:${10}
示例:

#!/bin/bash
echo "hello $1"

使用时:

./hello.sh Jam
# 输出:hello Jam

注意:使用双引号时,其中的$符会被视为变量参数,使用单引号则视为普通字符

  • $#

获取输入参数的个数,常用于循环,判断参数个数是否正确以加强脚本健壮性

#!/bin/bash
echo $0
echo $1
echo $#  # 会输出传入参数的个数
  • 其他特殊变量

$* 命令行中所有的参数,将这些参数视为一个整体,类似数组[a, b, c],可遍历
$@ 命令行中所有的参数,把每个参数区分对待
$? 最后一次执行的命令的返回状态,若该变量值为0表示上一个命令正确执行;若非0则表示上一个命令执行不正确,可直接在命令行中输入该命令查看结果

04 运算符

  • expr命令

expr 1 + 2返回数字3(注意空格)
加法:expr 1 + 2
减法:expr 5 - 2
乘法:expr 5 \* 2

  • 简化运算符

$((运算式))$[运算式]
例如:a=$[(2 + 3) * 4](运算式空格无严格要求,推荐该方式)
如果要将命令的结果视为值,使用$(表达式)写法 或 使用反引号 ``包裹
例如 a=$(expr 5 \* 2) 或 a=`expr 5 * 2`

案例

#!/bin/bash
sum=$[$1 + $2]
echo sum=$sum

05 获取用户台输入

基本语法:
read -t 秒数 -p "提示信息" 变量名
-t表示要等待的秒数,如果到期仍未输入会自动结束
-p表示提示信息
变量名表示输入的内容要保存的变量名

#!/bin/bash
# 获取用户输入,设置等待10秒(不设置-t表示一直等待),保存变量名为name
read -t 10 -p "请输入您的名字:" name
echo "hello $name"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序猿林仔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值