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