大家好,关于十分钟学会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。变量的范围
普通变量作用域是当前正在执行的程序,当前定义的变量不能在程序之外使用。通过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;函数有一个返回值:计算两个输入参数的和(函数返回值只能通过$?系统变量获得)。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/112708.html
用户评论
旧爱剩女
十分钟学会Shell脚本?也太理想了吧! 不过如果能系统讲解基础指令和语法,那倒是个不错的资源,我一直想学习写脚本啊!
有20位网友表示赞同!
一笑傾城゛
我尝试过很多“十分钟学会…”的教程,但结果都是摸个大概,真正上手还是需要不断练习和实战。希望这篇博文能给出一些量身定制的案例,比如如何用脚本简化日常工作流程等。
有7位网友表示赞同!
▼遗忘那段似水年华
期待这个 tutorials !好久想学习Shell脚本了,写一个简单的备份脚本就好! 希望能详细讲解变量、循环和条件语句这些基本概念!
有18位网友表示赞同!
箜篌引
十分钟太夸张了吧?Shell脚本可不止是几条指令那么简单,后面还有很多高级用法,例如函数定义、流控制等都需要深入理解啊。
有11位网友表示赞同!
巷雨优美回忆
这篇文章很有实用价值,特别是对初学者来说非常方便。我刚接触Shell脚本不久,希望能从这篇文章中获得一些启发和技巧
有20位网友表示赞同!
青山暮雪
真的十分钟学会? 还是赶紧去试试看吧!我已经很期待了,总想着利用Shell脚本提高工作效率!
有10位网友表示赞同!
何必锁我心
讲真,十分钟学会Shell脚本太理想化了。要想真正掌握它,需要花费大量的实践时间。这篇博文如果能提供一些练习题和示例脚本,那就更有价值了。
有8位网友表示赞同!
◆残留德花瓣
"十分钟"这个词汇有点 misleading 了吧…学习shell脚本需要逐步深入理解语法和逻辑,才能真正运用自如。不过希望这篇文章能够提供一些入门级的教程,帮助我抛开最初的懵懂感!
有15位网友表示赞同!
灼痛
对于Shell脚本新手来说,十分钟学会确实太急功近利了。但我欢迎任何能提供学习方法的文章,希望这篇博文能够让我对Shell脚本有一个初步了解,并找到适合自己的学习路径。
有18位网友表示赞同!
花开丶若相惜
期待这个教程分享一些实用案例!例如如何利用 Shell 脚本自动备份文件、管理系统日志等,更能吸引我这种实际操作需求比较强的读者。
有14位网友表示赞同!
入骨相思
最近想尝试用Shell脚本来自动化一些工作流程,正好看到这篇文章。希望能提供一些通俗易懂的讲解和实用的实例代码!
有11位网友表示赞同!
开心的笨小孩
说实话,我对"十分钟"这个词不太上心,SHELL脚本学习需要时间和耐心积累. 希望这篇文章能详细描述shell的语法结构和常用功能,并提供一些练习案例。
有10位网友表示赞同!
爱到伤肺i
我一直想学习 Shell 脚本,希望能通过这篇博文入门。希望它能够用通俗易懂的语言解释技术细节,降低学习门槛!
有10位网友表示赞同!
揉乱头发
对于我这种零基础的人来说,十分钟学会Shell脚本确实有点难度,不过还是期待能从这篇文章中获得一些入门知识。 至少能够知道SHELL脚本的用途和基本概念!
有11位网友表示赞同!
来瓶年的冰泉
我学过Python了,想试试Shell脚本,毕竟两者的语法有一些相似性。希望这篇文章能够帮助我快速掌握SHELL脚本的基本命令和用法!
有13位网友表示赞同!
┲﹊怅惘。
对于刚接触Linux系统的人来说,学习 Shell 脚本很可能会遇到各种问题。希望这篇博文能针对常见问题提供解决方案,提高学习效率!
有18位网友表示赞同!
你tm的滚
看完标题立马好奇极了,十分钟学会Shell脚本真的有可能吗?还是说要实际操作才能真正掌握它呢?期待详细的讲解和示范代码!
有12位网友表示赞同!