原文地址:https://www.sohu.com/a/300967157_100126044
一、简介
Shell是一种脚本语言,那么,就必须有解释器来执行这些脚本。Unix/Linux上常见的Shell脚本解释器有bash、sh、csh、ksh等,习惯上把它们称作一种Shell。我们常说有多少种Shell,其实说的是Shell脚本解释器。
二、基本介绍
1、学语言的经典”Hello World!”
打开文本编辑器,新建一个文件test.sh,扩展名为.sh(sh代表shell)。
输入一些代码:
#!/bin/bash
echo "Hello World !"

在命令行运行:
chmod +x test.sh && ./test.sh
运行结果:

2、注释
#!运行代码(是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种Shell)
其他以#开头注释(一般有蓝色区分),会被解释器忽略。sh里没有多行注释,只能每一行加一个#号。

3、在命令行打印输出
(1)echo:Shell的一个内部指令,用于在命令行屏幕上打印出指定的字符串。
echo abc

PS:echo后单引号和双引号作用是不同的。单引号不能转义里面的字符。双引号可有可无,单引号主要用在原样输出中。
例如:

(2)printf:格式化输出语句。
printf 命令用于格式化输出, 是echo命令的增强版。它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同。
如同 echo 命令,printf 命令也可以输出简单的字符串:
printf "123\n"

printf 不像 echo 那样会自动换行,必须显式添加换行符(\n)。
4、命令行从输入设备读入内容
#!/bin/bash
echo "What is your name?"
read name #输入
echo "你好, $name"
运行脚本:
chmod +x test1.sh && ./test1.sh

三、变量定义
1、定义变量
格式:变量=值 (默认变量类型是字符类型) abc=123
PS:等号两边不能有空格,对同一变量名定义,以最后一次定义的值生效
(1)查看已定义的变量-set
abc=123
set | grep abc

(2)变量命名规则:
首个字符必须为字母(a-z,A-Z)
区分字母大小写
可以使用字母、数字和下划线组合
但不能使用标点符号
2、使用变量
使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:$变量名
abc=123
echo $abc

3、删除变量-unset
变量被删除后不能再次使用;unset 命令不能删除只读变量。
unset abc

四、变量类型
1、局部变量:
(1)局部变量在脚本或命令中定义
(2)仅在当前shell实例中有效
(3)其他shell启动的程序不能访问局部变量
2、系统环境变量:
(1)系统启动时加载系统配置文件或服务的配置文件
(2)在文件中定义的所用用户都可以调用
(3)变量名是固定的,值可以被修改
(4)在写脚本时,系统环境变量可以直接被使用或者重新赋值
(5)env 查看当前所有已经定义的系统环境变量
(6)系统环境变量名一般是大写
3、shell预定义变量(特殊变量):
在使用的shell(/bin/bash)已经定义好的变量,变量名和变量值都不可以被修改,变量值根据当前的运行环境,随机获取的。
(1)$0 当前终端运行进程的进程名 当前执行脚本
(2)$n 传递给脚本或函数的参数
n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。testsh.sh脚本如下:
#!/bin/bash
echo "The Firiet Name: $0"
echo "The First Parameter : $1"
执行该脚本,sh testsh.sh firstPara( 设置$1参数的值)

(3)$! 当前终端后台运行最后运行进程的PID号
(4)$$ 当前终端运行进程的pid号
(5)$# 脚本或函数位置变量的总个数
(6)$* 脚本或函数所有位置变量的值
(7)$? 上一条命名执行后的返回状态
echo $? 0 表示上条命令执行正确 非0 表示上条命令执行不正确
例子:
[root@ecloud ~]# cat test3.sh
#!/bin/bash
echo "The Firiet Name: $0"
echo "The First Parameter : $1"
echo "The Second Parameter : $2"
echo "Quoted Values 1: $*"
echo "Total Number of Parameters : $#"
echo "This pid : $$"
echo "Return results :$?"
执行的结果如下:

网友评论