Shell语法全解

2024-06-24 05:20
文章标签 shell 全解 语法

本文主要是介绍Shell语法全解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Shell基础语法全解

  • 一、shell简介
  • 二、shell格式
    • 2.1 新建一个shell脚本文件
    • 2.2 执行脚本方式
  • 三、变量
    • 3.1系统变量
    • 3.2自定义变量
    • 3.3 特殊变量
      • 3.3.1 `$n` 传入变量
      • 3.3.2 `$#` 输入参数个数
      • 3.3.3 `$*`、`$@` 输入参数内容
      • 3.3.4 `$?` 上一条命令执行结果
  • 四、运算符 `$[]`、`$(())`
  • 五、条件判断
    • 5.1判断数值大小
    • 5.2 判断文件权限、文件类型
  • 六. 流程判断
    • 6.1 if 判断
    • 6.2 case 判断
    • 6.3 for 循环
    • 6.4 until 循环
    • 6.5 while 循环

一、shell简介

shell是命令解释程序,它有很多种,例如:sh、bash、ash、dash等。

不同系统可能会使用不同的shell

#查看当前系统使用的shell是哪种
echo $SHELL
#输出,当前系统默认使用bash
/bin/bash

二、shell格式

2.1 新建一个shell脚本文件

#创建hello.sh文件
touch hello.sh
#修改权限
chmod +x hello.sh#编辑脚本文件
vim hello.sh

向hello.sh添加以下代码

#第一行开始的格式
#!/bin/bashecho "hello"

2.2 执行脚本方式

#1.查看当前系统有哪些shell
ll /bin/ | grep sh
#输出
-rwxr-xr-x  1 root root 1037528 7月  13  2019 bash*
-rwxr-xr-x  1 root root  253816 8月  14  2019 btrfs-show-super*
-rwxr-xr-x  1 root root  154072 2月  18  2016 dash*
lrwxrwxrwx  1 root root       4 5月  17 20:28 rbash -> bash*
lrwxrwxrwx  1 root root       4 5月  17 20:28 sh -> dash*
lrwxrwxrwx  1 root root       4 5月  17 20:28 sh.distrib -> dash*
lrwxrwxrwx  1 root root       7 3月   7  2019 static-sh -> busybox*
#以上可以看到有bash 和sh 两种#2.使用不同shell执行
#使用默认shell执行
./hello.sh#指定使用 bash 执行
bash hello.sh#指定使用 sh 执行
sh hello.sh#以上两种都输出
hello

三、变量

3.1系统变量

常用系统变量

#当前主目录
echo $HOME
#当前用户
echo $USER
#默认工作目录
echo $PWD
#默认shell
echo $SHELL
#默认语言
echo $LANGUAGEecho [$+变量名]
#等价于
printenv 变量名

3.2自定义变量

#定义变量  等号前面不能有空格
#变量名=变量值   
MyName="lisi"#撤销变量
unset MyName

撤销案例

a=2
echo $a
#输出
2
#撤销变量
unset a
echo $a
#输出空行

3.3 特殊变量

3.3.1 $n 传入变量

  $n 中的n是指代数字,表示第n个传入变量 第0个变量是脚本名称,其中$1-$9是第1个到第9个变量,十以上需要用大括号包括 ${10}

3.3.2 $# 输入参数个数

  $# 是输入参数个数,可以在shell脚本中通过该变量获取。

3.3.3 $*$@ 输入参数内容

  这俩个都是获取所有输入参数,但是$@可以被遍历

#编辑hello.sh#!/bin/bash
echo '=======$n========='
echo '$0 arg0 is:'  $0
echo '$1 arg1 is:'  $1
echo '$2 arg2 is:'  $2
echo '$3 arg3 is:'  $3
echo '$4 arg4 is:'  $4
echo '=======$#========='
echo 'args total is:' $#
echo '=======$*========='
echo 'args str is:' $*
echo '=======$@========='
echo 'args str enumable is' $@#执行命令
./hello.sh arg1 arg2 arg3 arg4 arg5
#输出
=======$n=========
$0 arg0 is: ./hello.sh
$1 arg1 is: arg1
$2 arg2 is: arg2
$3 arg3 is: arg3
$4 arg4 is: arg4
=======$#=========
args total is: 5
=======$*=========
args str is: arg1 arg2 arg3 arg4 arg5
=======$@=========
args str enumable is arg1 arg2 arg3 arg4 arg5

3.3.4 $? 上一条命令执行结果

echo $[1/0]
#输出
-bash: 1/0: 除0 (错误符号是 "0")echo $?
#输出 1为上一条命令执行有错误,0表示没有错误
1./hello.sh
#没有报错的话,输出0
0

四、运算符 $[]$(())

  $[]$(()) 用于数值计算,避免歧义,所以括起来进行计算。

#!/bin/bash
s1=$[(1+3)*5]
s2=$((5+3))
echo '(1+3)*5 =' $s1
echo '5+3 =' $s2
sum=$[$1+$2]
echo '$1+$2=' $sum#执行
./com.sh 12 13
#输出
(1+3)*5 = 20
5+3 = 8
$1+$2= 25

五、条件判断

5.1判断数值大小

判断符号含义
-eq等于
-ne不等于
-lt小于
-le小于等于
-gt大于
-ge大于等于

基础案例

test 4 -gt 3
echo $?
#输出  0表示true,1表示false
0test 4 -lt 3
echo $?
#输出  0表示true,1表示false
1#等价于上面,但是注意括号前后需要有空格
[ 4 -gt 3 ]
echo $?
#输出  0表示true,1表示false
0

5.2 判断文件权限、文件类型

判断文件权限

判断权限符号文件权限
-r有读的权限
-w有写的权限
-x有执行的权限

判断文件类型

判断类型符号文件类型
-e文件存在
-f文件存在且是一个常规文件
-d文件存在且是一个目录

多条件判断

使用 && 进行短路与操作,如果第一个条件为false,直接返回false。

使用 || 进行短路或操作,如果第一个条件为true,直接返回true。

#判断shell脚本是否为文件夹
[ -d com.sh ]
echo $?
#输出1   false
1#可以利用多条件判断,构成一个类似 ?: 的三元运算
[ -f com.sh ] && echo true || echo false
#输出
true

六. 流程判断

6.1 if 判断

使用格式

#格式一
if [ 条件判断式 ]
then语句
fi
或者
if [ 条件判断式 ];then语句
fi#格式二
if [ 条件判断式 ]
then语句
elif [ 条件判断式 ]
then语句
else语句
fi

基础案例

#编辑if.sh#!/bin/bash
if [ 4 -gt 3 ];thenecho true
elseecho false
fi./if.sh
#输出
true

if判断案例

#!/bin/bash
if [ $# -gt 1 ]
thenif [ $1 -gt $2 ]thenecho $1 is biggerelif [ $1 -lt $2 ]thenecho $2 is biggerelseecho $2 equal $1fi
elseecho args too less
fi./if.sh 1 3
#输出
3 is bigger./if.sh
#输出
args too less

6.2 case 判断

使用格式

case $1 in
条件1)语句;;
条件2)语句;;
*)其他情况;;
esac

基础案例

#编辑文件 case.sh#!/bin/bash
if [ $# -le 0 ]
thenecho args is lessexit 1
fiecho arg num is $#,arg1 is $1case $1 in
1)echo arg is 1;;
2)echo arg is 2;;
*)echo arg is $1;;
esac./case.sh 8
#输出
arg num is 1,arg1 is 8
arg is 8./case.sh 3
#输出
arg num is 1,arg1 is 3
arg is 3

6.3 for 循环

使用格式

#格式一
for i in $@
doecho $i
done#格式二
for ((i=1;i<=5;i++))
doecho $i
done

基本案例

#编辑for.sh文件
#!/bin/bash
echo arg num is $#.
for i in $@
doecho $i
done./for.sh 1 2 3 4 5 6
#输出
arg num is 6.
1
2
3
4
5
6

6.4 until 循环

使用格式

until 条件
do语句
done

基本案例

#编辑 until.sh#!/bin/bash
i=1
sum=0
#until中条件为true就退出
#直到i大于10就退出,意思是这里i为11就退出
until [ $i -gt 10 ]
dosum=$[$i+$sum]let i++
done
echo $sum./until.sh
#输出
55

6.5 while 循环

使用格式

while 条件
do语句
done

基本案例

#!/bin/bash
i=1
sum=0
#while中条件为false就退出
#当i小于等于10就执行循环语句,意思是这里i为11就退出
while [ $i -le 10 ]
dosum=$[$i+$sum]let i++
done
echo $sum

这篇关于Shell语法全解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089275

相关文章

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

UE3脚本UnrealScript UC语法点滴

持续更新 目录 类定义修饰符  1.dependson(CLASSNAME) 2.config(ININAME) 3.native 4.notplaceable 5.inherits(CLASSNAME1[,CLASSNAME2,...]) 类对象实例创建 类默认属性设置 变量 1.声明 var local 2.修饰符 config  3.array 类型变量 以及

PHP的基本语法有哪些?

PHP的基本语法包括以下几个方面: PHP标记:PHP脚本以<?php开始,以?>结束。这是PHP文件的默认文件扩展名是.php。 变量和常量:变量以$符号开头,其后是变量的名称。常量使用define()函数定义,例如define("常量名", 常量值);。 数据类型:PHP支持多种数据类型,如整型、浮点型、字符串型等。 注释:PHP支持单行注释(用//表示)和多行注释(用/* */表示

Flex 布局教程:语法篇

网页布局(layout)是 CSS 的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 20

hbase中shell命令

HBase scan命令详解 - 简书https://www.jianshu.com/p/0ccfd59d73f4 Hbase中多版本(version)数据获取办法_牛奋lch-CSDN博客_hbase 多版本前言:本文介绍2种获取列的多版本数据的方式:shell和spring data hadoop一、hbase shell中如何获取    1、在shell端创建一个Hbase表create

Android常用命令行——gradlew,adb,adb shell

gradlew 下面全是针对 windows 操作系统的。如果是 Linux / Mac 请直接用 ./ 前缀。 gradlew clean //类似Clean Project gradlew -v //查看Gradle、Groovy、Ant、JVM等的版本gradlew build --info //编译并打印日志gradlew dependencies --info //查看详细的依

shell的正则表达式

一、正则表达式:匹配的是文本内容(文本三剑客:grep:过滤文本内容       sed:针对文本内容进行增删改查        awk:按行取列) 二、grep:过滤 1.grep:过滤文本内容,作用就是使用正则表达式来匹配文本内容。    grep命令格式:grep -m 1 “bash”  /etc/passwd                             cat  /e

Linux——Shell脚本

重头戏终于来了! 一、Shell脚本简介 shell script 是利用 shell 的功能所写的一个『程序 (program)』,这个程序是使用纯文本文件,将一些 shell 的语法与指令(含外部指令)写在里面, 搭配正规表示法、管线命令与数据流重导向等功能,以达到我们所想要的处理目的。 #!/bin/bash 在宣告这个 script 使用的 shell 名称。 用vi test.s

从PATH说起的shell命令行替换

许久之前,师弟问了我一个问题,为什么shell中添加环境变量的写法是下面这种方式 PATH=~/.lib:$PATH; export PATH 而下面这种会报错呢? $PATH=~/.lib:$PATH; export PATH 当时我的回答是,"shell就是这样子规定的呀"。 回答的同时,也突然间发现有些自己感觉很熟悉的概念,原来自己并没有那么清楚,因此这一篇讲讲shell的命令行

全面分析一下前端框架Angular的来龙去脉,分析angular的技术要点和难点,以及详细的语法和使用规则,底层原理-小白进阶之路

Angular 前端框架全面分析 Angular 是一个由 Google 维护的开源前端框架。它最早在 2010 年发布,最初版本称为 AngularJS。2016 年,团队发布了一个完全重写的版本,称为 Angular 2,之后的版本(如 Angular 4、Angular 5 等)都统称为 Angular。 一、历史背景 1. AngularJS(Angular 1.x) 发布年份:2