shell语言入门

前言

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁,是linux内置的一款软件。
通过编写Shell的脚本,可以更好的使用linux系统(比如、安装卸载软件、增删改查文件等等),毕竟大部分linux、系统都没有界面,不像windows那样鼠标点点就完成了大部分需求。

shell软件的种类有很多,而且很多都被linxu内置(zsh很多linux尚未支持,可能需要安装和配置),不过好在他们的各自的脚本写法大差不差,且脚本文件的后缀名都为sh

名称 俗称 介绍 切换方式
Bourne Shell sh 最古老的 默认即是
Bourne Again Shell bash 最主流的 #!/bin/bash
Z-shell zsh 后起之秀 #!/usr/bin/env zsh

如何让linux知道我的sh需要用哪种shell程序执行呢?
在sh文件的第一行加上注释即可,比如我要使用bash作为我的此脚本文件的默认执行程序 #!/bin/bash

本教程关注的是 Bash,它易用和免费且大部分Linux 默认的 Shell

如何执行脚本文件

运行 Shell 脚本有两种方法:
作为可执行程序 ./test.sh
作为解释器参数(这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用) /bin/sh test.sh

变量

任何编程语言(脚本语言也是编程语言 比如js),变量都是基础。
变量是用于存储数据值的名称。

name="张三"

如使用变量呢?
加一个$ 即可,比如我要输出:echo $name即可,这点和其他语言不一样,不能直接echo name

数据类型

谈到变量,就不得不提数据类型。

字符串

用单引号 ' 或双引号 " 来定义字符串类型,区别是单引号里的任何字符都会原样输出(比如 变量和转义字符)。

name="xiaoming"

所以涉及到字符串的拼接,还是需要使用双引号模式。

echo "hello,$name" # 将会输出:hello,xiaoming 

为了区分(主要是变量后的)边界,你还可以使用${name},比如

echo "hello,${name}tongxue!" # 将会输出:hello,xiaomingtongxue

数字

在shell中所有变量默认都是字符串型,,如果想作为数字运算需要用((运算式))$[运算式]expr命令这种形式

a=1
b=2
echo $a+$b # 打印:1+2
echo $[$a+$b] # 打印:3

另外shell默认不支持浮点数运算,需要通过第三方库yum -y install bc进行浮点运算

数组

两种定义方式:用括号来表示数组,数组元素用"空格"符号分割开。或者用角标分别单独定义

arr=(value0 value1 value2)
arr[0]=value0
arr[1]=value1
arr[age]=20

使用 ${}符号可以获取数组中的所有元素,例如:

echo ${arr[age]} #打印:20

传递参数

shell允许在执行脚本时,向脚本内部传递参数,
比如我们有一个脚本test.sh如下 :

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";

我们来执行它 ./test.sh 哈哈 嘻嘻,将会得到如下输出

[root@VM-24-8-centos ]# ./test.sh 哈哈 嘻嘻
执行的文件名:./test.sh
第一个参数为:哈哈
第二个参数为:嘻嘻

运算符

单独总结了一篇,点击查看

特殊符号

${ }、$[ ]、$( )的区别

${ }
Shell中使用一个已经定义过的变量,只要在变量名前面加美元符号$即可。
变量名外面的{ }是可选的,只是为了帮助解释器识别变量的边界。

str="java"
echo "I am $str"
echo "I am $s{str}Script"

$[]
是运算操作符,用于对整数进行数学运算

echo $[3*5] # 输出:8

$()
Shell 支持将命令的执行结果赋值给变量,即“命令替换”,。

variable=$(command)
variable=`command` # 命令替换的另一种写法

[ ]、[[ ]]、(())的区别

[ ]是test命令的简写形式,而test命令主要用于检测某个条件是否成立。
[[ ]] 是 test 的升级版,对细节进行了优化,并且扩展了一些功能,完全可以取代[ ]。
(())是一个数学计算命令,用于对整数进行数学运算,比如((a=10+66))

test命令用于检查文件类型和比较值,并且根据表达式的值来确定状态并退出。
所以如果只执行test命令,是不会有任何输出的,
可以使用echo $?来查看上次执的状态码(0表示成功,其他值则表示不成功)。
它经常和判读语句f..then一起使用,如果在终端输出打印,则经常和管道命令&&和||一起使用,如:

test 1 -ge 2 && echo "yes" || echo "no"
no

参考: https://blog.csdn.net/oqqHuTu12345678/article/details/129257269

posted @ 2024-06-19 18:36  丁少华  阅读(26)  评论(0编辑  收藏  举报