SHELL基础

SHELL基础

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。


在这里插入图片描述

SHELL脚本

平时所说的 shell 通常都是指 shell 脚本,但是shell 和 shell script 是两个不同的概念。

示例:

vim test.sh
#!/bin/bash							#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种shell
echo "this is test"					echo 命令用于向窗口输出文本
:wq									保存退出
chmod +x test.sh					赋予执行权限
sh test.sh或./test.sh			   执行脚本

SHELL变量

变量类型

  • 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  • 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  • shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

定义变量

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线 _
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

示例:

your_name="wpc"
your_name="wpc_2"
your_name="wpc_test_bak"

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可。

示例:

your_name="wpc"							定义
echo $your_name或echo ${your_name}	   使用
wpc										结果

只读变量

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变

示例:

your_name="wpc"							定义变量
readonly your_name						定义只读

删除变量

使用 unset 命令可以删除变量。

示例:

your_name="wpc"							定义
unset your_name							删除

SHELL符号和字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

被单引号用括住的内容,将被视为单一字串。在引号内的代表变数的$符号,没有作用,也就是说,他被视为一般符号处理,防止任何变量替换。

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

示例:

test='this is test'

双引号

被双引号用括住的内容,将被视为单一字串。它防止通配符扩展,但允许变量扩展。这点与单引数的处理方式不同。

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
your_name="wpc"
test="Hello, I know you are \"$your_name\"! \n"
echo -e $test

井号

井号出现在一行的开头,或者位于完整指令之后,这类情况表示符号后面的是注解文字,不会被执行

分号
在 shell 中,担任"连续指令"功能的符号就是"分号"。

倒引号
在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行。要处理这种情况,我们得用倒单引号来做。

逗号
这个符号常运用在运算当中当做"区隔"用途。

斜线
在路径表示时,代表目录,在四则运算中,代表除法的符号。

倒斜线
在交互模式下的escape 字元,有几个作用;放在指令前,有取消 aliases的作用;放在特殊符号前,则该特殊符号的作用消失;放在指令的最末端,表示指令连接下一行。

管道符
pipeline 是 UNIX 系统,基础且重要的观念。连结上个指令的标准输出,做为下个指令的标准输入。

惊叹号
通常它代表反逻辑的作用,譬如条件侦测中,用 != 来代表"不等于",在规则表达式中担任 “反逻辑” 的角色。

问号
在文件名扩展(Filename expansion)上扮演的角色是匹配一个任意的字元,但不包含 null 字元。

星号
相当常用的符号。在文件名扩展(Filename expansion)上,她用来代表任何字元,包含 null 字元,在运算时,它则代表 “乘法”。

次方运算
两个星号在运算时代表 “次方” 的意思。

钱号
变量替换(Variable Substitution)的代表符号,另外,在 Regular Expressions 里被定义为 “行” 的最末端 (end-of-line)。这个常用在grep、sed、awk 以及 vim(vi) 当中。

${} 变量的正规表达式

$* 引用script的执行引用变量,引用参数的算法与一般指令相同,指令本身为0,其后为1,然后依此类推。

$@ 与 $* 具有相同作用的符号,不过她们两者有一个不同点,符号 $* 将所有的引用变量视为一个整体。但符号 $@ 则仍旧保留每个引用变量的区段观念。

$# 这也是与引用变量相关的符号,她的作用是告诉你,引用变量的总数量是多少。

$? 状态值 ,UNIX(linux) 系统的进程以执行系统调用exit()来结束的。这个回传值就是status值。回传给父进程,用来检查子进程的执行状态。

大括号
有时候 script 当中会出现,大括号中会夹着一段或几段以"分号"做结尾的指令或变数设定。大括号也被运用在 “函数” 的功能上。广义地说,单纯只使用大括号时,作用就像是个没有指定名称的函数一般。因此,这样写 script也是相当好的一件事。尤其对输出输入的重导向上,这个做法可精简 script 的复杂度。

中括号
常出现在流程控制中,扮演括住判断式的作用,这个符号在正则表达式中担任类似 “范围” 或 “集合” 的角色 。

括号
用括号将一串连续指令括起来,这种用法对 shell 来说,称为指令群组。

双括号

这组符号的作用与 let 指令相似,用在算数运算上,是 bash 的内建功能。

双中括号

这组符号与先前的 [] 符号,基本上作用相同,但她允许在其中直接使用 || 与&& 逻辑等符号。

& 后台工作
单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。

^
这个符号在规则表达式中,代表行的 “开头” 位置,在[]中也与"!"(叹号)一样表示“非”

输出/输入重导向

命令说明
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。

SHELL运算符

算术运算符

运算符说明举例
+加法expr $a + $b 结果为 30。
-减法expr $a - $b 结果为 -10。
*乘法expr $a \* $b 结果为 200。
/除法expr $b / $a 结果为 2。
%取余expr $b % $a 结果为 0。
=赋值a=$b 把变量 b 的值赋给 a。
==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。
!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

关系运算符

运算符说明举例
-eq检测两个数是否相等,相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等,不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

逻辑运算符

运算符说明举例
&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

test命令

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

数值测试

参数说明
-eq等于则为真
-ne不等于则为真
-gt大于则为真
-ge大于等于则为真
-lt小于则为真
-le小于等于则为真

字符串测试

参数说明
=等于则为真
!=不相等则为真
-z 字符串字符串的长度为零则为真
-n 字符串字符串的长度不为零则为真

文件测试

参数说明
-e 文件名如果文件存在则为真
-r 文件名如果文件存在且可读则为真
-w 文件名如果文件存在且可写则为真
-x 文件名如果文件存在且可执行则为真
-s 文件名如果文件存在且至少有一个字符则为真
-d 文件名如果文件存在且为目录则为真
-f 文件名如果文件存在且为普通文件则为真
-c 文件名如果文件存在且为字符型特殊文件则为真
-b 文件名如果文件存在且为块特殊文件则为真

示例:

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '两个数相等!'
else
    echo '两个数不相等!'
fi

num1="wpc"
num2="wpc1"
if test $num1 = $num2
then
    echo '两个字符串相等!'
else
    echo '两个字符串不相等!'
fi

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

echo命令

Shell 的 echo 指令与 PHP 的 echo 指令类似,都是用于字符串的输出。

echo "It is a test"					显示普通字符
echo "\"It is a test\""				显示转义字符

#!/bin/sh
name="wpc"
echo "$name It is a test"			显示变量

echo -e "OK! \c" # -e 				显示不换行,开启转义 \c 不换行
echo -e "OK! \n" # -e 				显示换行,-e 开启转义

echo "It is a test" > wpc			显示结果定向到文件
echo '$name\"'						原样输出字符,不进行转义或取变量
echo `date`							显示命令执行结果

SHELL传递参数

可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$nn 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

示例:

vim wpc.sh
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";

chmod +x wpc.sh

./test.sh 1 2 3

Shell 传递参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
第一个参数为:1
参数个数为:3
传递的参数作为一个字符串显示:1 2 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值