十分钟学会Shell 脚本

前言本篇文章没有太多的理论知识,主要分为基础语法案例、常用工具型命令(重点:帮助我们完成复杂需求)、工作中常见的需求(实战案例有源码,工作中可以直接套用),建议

大家好,关于十分钟学会Shell 脚本很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

概述

Shell是用C语言编写的,俗称shell。开发者如果想要操作Linux系统内核,就必须通过Shell脚本进行交互,解释并执行用户命令。它们无法绕过Shell直接操作Linux内核。 Shell 是一种功能强大的编程语言,易于使用且功能强大。

Shell 解析器

Linux 中有几种常见的解析器。以下模板是使用Bash(最常用的解析器)解析器编写的。检查当前系统支持哪些解析器:

猫/etc/shell

查看系统当前使用的shell解析器:

回显$SHELL

基础语法与实操案例

Shell 变量

对于后台开发者来说,系统环境变量肯定很熟悉,这里不再赘述。 Shell变量分为两种类型:系统变量和自定义变量。

系统变量

常用系统变量如下:

变量名

解释

$PWD

执行脚本的当前目录

$UID

当前操作的系统用户ID

\$\$

当前运行用户的PID

$#

当前脚本中的参数数量

$*

当前脚本的所有参数

$0

当前正在执行的程序的名称

$n

当前程序的第N个参数

$HOME

当前程序的主目录

$用户

查询当前程序使用的操作用户

自定义变量

1. 变量命令规则

变量名必须以字母或下划线字符“_”开头,后跟字母、数字或下划线字符。切记不要使用特殊符号,否则给自己带来不必要的麻烦。

2、查看当前Shell所有环境变量

3.编写自定义变量

# 变量名=值如:A=1 等号两边不能有空格。如果值中间有空格,请使用单引号或双引号: A=’张三’# 取消设置变量unset A# 定义静态变量,静态变量不允许二次赋值,静态变量不能取消设置,取消只读B=24。变量的范围

十分钟学会Shell 脚本

普通变量作用域是当前正在执行的程序,当前定义的变量不能在程序之外使用。通过export,可以将该变量升级为全局环境变量,使得当前系统中的所有程序都可以使用该环境变量。

创建测试脚本:

给touch test.sh分配执行权限:

chmod u+x test.sh 脚本:

vim test.sh 定义了一个全局脚本(脚本内容如下):

export user_name=’张三’#!/bin/bashecho $user_name5.由于定义了全局变量,执行脚本可以正常输出\$user_name变量的值。相反,脚本中定义的局部变量在其他脚本中无法正常输出。结果。

./test.sh

运算符

运算符的类型大致可以分为4种(直接代码示例)。

算数运算符

#!/bin/bash a=10 b=20 # 加法val=`expr $a + $b` echo ‘a + b : $val’ # 减法val=`expr $a – $b` echo ‘ a – b : $val’ # 乘法val=`expr $a \* $b` echo ‘a * b : $val’ # 除法val=`expr $b/$a` echo ‘b/a : $val’ # 取余数val=`expr $b % $a` echo ‘b % a : $val’ # 等于if [ $a==$b ] then echo ‘a 等于b’ fi if [ $a !=$ b ] then echo ‘a 不等于b’ fi

关系运算符

#!/bin/bash a=10 b=20 # 等于if [ $a -eq $b ] then echo ‘$a -eq $b : a 等于b’ else echo ‘$a -eq $b: a 不等于b’ fi # 不等于if [ $a -ne $b ] then echo ‘$a -ne $b: a 不等于to b’ else echo ‘$a -ne $b : a 等于b’ fi # 大于if [ $a -gt $b ] then echo ‘$a -gt $b: a 大于b’ else echo ‘$a -gt $b: a 不大于b’ fi # 小于if [ $a -lt $b ] then echo ‘$a -lt $b: a 小于b’ else echo ‘$a -lt $ b: a 不小于b’ fi # 大于或等于if [ $a -ge $b ] then echo ‘$a -ge $b: a 大于或等于b’ else echo ‘$a -ge $b: a 小于b’ fi # 小于或等于if [ $a -le $b ] then echo ‘$a -le $b: a 小于或等于b ‘ else echo ‘$a -le $b: a大于b’ fi

布尔运算符

#!/bin/bash a=10 b=20 # !非操作,同java if [ $a !=$b ] then echo ‘ $a !=$b : a is not equal to b’ else echo ‘$a==$b: a is equal to b’ fi # AND 运算,与java 中相同if [ $a -lt 100 -a $b -gt 15 ] then echo ‘$a 小于100 并且$b 大于15 : 返回true’ else echo ‘$a is小于100且$b大于15 : returns false’ fi # 或运算,同||在java 中if [ $a – lt 100 -o $b -gt 100 ] then echo ‘$a 小于100 或$b 大于100 : 返回true’ else echo ‘$a 小于100 或$b 是大于100 : 返回false’ fi if [ $a -lt 5 -o $b -gt 100 ] then echo ‘$a 小于5 或$b 大于100 : 返回true’ else echo ‘$a 小于大于5 或$b 大于100 : returns false’ fi

字符串运算符

#!/bin/bash a=’abc’ b=’efg’ # 判断字符串是否相等if [ $a=$b ] then echo ‘$a=$b : a is equal to b’ else echo ‘$a=$b: a is not equal to b’ fi # 判断字符串是否不相等if [ $a !=$b ] then echo ‘$a !=$b : a is not equal to b’ else echo ‘$a !=$b: a is equal to b’ fi # -n 判断字符字符串长度是否不为0 if [ -n ‘$a’ ] then echo ‘-n $a : 字符串长度不为0’ else echo ‘-n $a : 字符串长度为0’ fi # 与-n 相反if [ -z $a ] then echo ‘-z $a : 字符串length is 0’ else echo ‘-z $a : 字符串长度不为0’ fi # $ 表示检查字符串是否为空if [ $a ] then echo ‘$a : 字符串不为空’ else echo ‘$ a : 字符串为空’ fi

流程控制

if else 不再介绍。上述算子案例应用广泛。对于后端开发及其简单来说,流控制在程序中使用得非常频繁。

case 语法直接套用

最后一个*)表示默认模式,相当于Java中的default,而;表示命令序列的结束,相当于Java中的break。

!/bin/bash case $1 in ‘1’) echo ‘张三’ ; ‘2’) echo ‘李思’ ; *) echo ‘王二’ ; esac

for 循环

案例:从1 添加到100 。

#!/bin/bash s=0 for((i=0;i=100;i++)) do s=$[$s+$i] did echo $s

while 循环

示例:从1 加到100。

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

函数

Shell脚本与其他编程语言类似,分为系统函数和自定义函数。

系统函数

1.basename基本语法

basename路径后缀功能说明:basename命令将删除包括最后一个(‘/’)字符在内的所有前缀,然后显示字符串。

不带后缀:

添加后缀:

如果脚本需要获取当前路径的后缀名:

2.dirname基本语法

dirname 文件绝对路径函数说明:从给定的包含绝对路径的文件名中删除文件名(非目录部分),然后返回剩余的路径(目录部分)。

自定义函数

1. 基本语法:

[ 函数] funname[()]{ 动作; [return int;]} 2.体验技巧

函数返回值只能通过$?获取系统变量。可以通过添加return来显示返回值。如果没有,则运行最后一个命令的结果将用作返回值。 return 后面跟着值n (0~255)。 3、案例实践

函数没有返回值:计算两个输入参数的总和。

脚本源代码:

#!/bin/bash function sum() { s=0 s=$[ $1 + $2 ] echo ‘$s’ } # read 从控制台读取输入,n1、n2用于接收输入内容,-p :指定读取值时提示; -t:指定读取值时的等待时间(秒) read -p ‘请输入数字1: ‘ n1; read -p ‘请输入号码2: ‘ n2; # 调用方法sum $n1 $n2;函数有一个返回值:计算两个输入参数的和(函数返回值只能通过$?系统变量获得)。

用户评论

十分钟学会Shell 脚本
旧爱剩女

十分钟学会Shell脚本?也太理想了吧! 不过如果能系统讲解基础指令和语法,那倒是个不错的资源,我一直想学习写脚本啊!

    有20位网友表示赞同!

十分钟学会Shell 脚本
一笑傾城゛

我尝试过很多“十分钟学会…”的教程,但结果都是摸个大概,真正上手还是需要不断练习和实战。希望这篇博文能给出一些量身定制的案例,比如如何用脚本简化日常工作流程等。

    有7位网友表示赞同!

十分钟学会Shell 脚本
▼遗忘那段似水年华

期待这个 tutorials !好久想学习Shell脚本了,写一个简单的备份脚本就好! 希望能详细讲解变量、循环和条件语句这些基本概念!

    有18位网友表示赞同!

十分钟学会Shell 脚本
箜篌引

十分钟太夸张了吧?Shell脚本可不止是几条指令那么简单,后面还有很多高级用法,例如函数定义、流控制等都需要深入理解啊。

    有11位网友表示赞同!

十分钟学会Shell 脚本
巷雨优美回忆

这篇文章很有实用价值,特别是对初学者来说非常方便。我刚接触Shell脚本不久,希望能从这篇文章中获得一些启发和技巧

    有20位网友表示赞同!

十分钟学会Shell 脚本
青山暮雪

真的十分钟学会? 还是赶紧去试试看吧!我已经很期待了,总想着利用Shell脚本提高工作效率!

    有10位网友表示赞同!

十分钟学会Shell 脚本
何必锁我心

讲真,十分钟学会Shell脚本太理想化了。要想真正掌握它,需要花费大量的实践时间。这篇博文如果能提供一些练习题和示例脚本,那就更有价值了。

    有8位网友表示赞同!

十分钟学会Shell 脚本
◆残留德花瓣

"十分钟"这个词汇有点 misleading 了吧…学习shell脚本需要逐步深入理解语法和逻辑,才能真正运用自如。不过希望这篇文章能够提供一些入门级的教程,帮助我抛开最初的懵懂感!

    有15位网友表示赞同!

十分钟学会Shell 脚本
灼痛

对于Shell脚本新手来说,十分钟学会确实太急功近利了。但我欢迎任何能提供学习方法的文章,希望这篇博文能够让我对Shell脚本有一个初步了解,并找到适合自己的学习路径。

    有18位网友表示赞同!

十分钟学会Shell 脚本
花开丶若相惜

期待这个教程分享一些实用案例!例如如何利用 Shell 脚本自动备份文件、管理系统日志等,更能吸引我这种实际操作需求比较强的读者。

    有14位网友表示赞同!

十分钟学会Shell 脚本
入骨相思

最近想尝试用Shell脚本来自动化一些工作流程,正好看到这篇文章。希望能提供一些通俗易懂的讲解和实用的实例代码!

    有11位网友表示赞同!

十分钟学会Shell 脚本
开心的笨小孩

说实话,我对"十分钟"这个词不太上心,SHELL脚本学习需要时间和耐心积累. 希望这篇文章能详细描述shell的语法结构和常用功能,并提供一些练习案例。

    有10位网友表示赞同!

十分钟学会Shell 脚本
爱到伤肺i

我一直想学习 Shell 脚本,希望能通过这篇博文入门。希望它能够用通俗易懂的语言解释技术细节,降低学习门槛!

    有10位网友表示赞同!

十分钟学会Shell 脚本
揉乱头发

对于我这种零基础的人来说,十分钟学会Shell脚本确实有点难度,不过还是期待能从这篇文章中获得一些入门知识。 至少能够知道SHELL脚本的用途和基本概念!

    有11位网友表示赞同!

十分钟学会Shell 脚本
来瓶年的冰泉

我学过Python了,想试试Shell脚本,毕竟两者的语法有一些相似性。希望这篇文章能够帮助我快速掌握SHELL脚本的基本命令和用法!

    有13位网友表示赞同!

十分钟学会Shell 脚本
┲﹊怅惘。

对于刚接触Linux系统的人来说,学习 Shell 脚本很可能会遇到各种问题。希望这篇博文能针对常见问题提供解决方案,提高学习效率!

    有18位网友表示赞同!

十分钟学会Shell 脚本
你tm的滚

看完标题立马好奇极了,十分钟学会Shell脚本真的有可能吗?还是说要实际操作才能真正掌握它呢?期待详细的讲解和示范代码!

    有12位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112708.html

Like (0)
小su的头像小su
Previous 2024年8月31日 下午11:02
Next 2024年8月31日 下午11:04

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注