Shell基本学习

Shell 概述

shell是一个命令行解释器,主要用于翻译用户操作,调用系统内核

是一个十分强大的编程语言

Linux对shell提供了下面这几个解析器(可去etc/shells中找到解析器列表)

/bin/sh 
/bin/bash 
/usr/bin/sh 
/usr/bin/bash 
/bin/tcsh 
/bin/csh

Shell 脚本基本编写

shell脚本文件一般以.sh结尾

我们可以使用touch命令创建一个.sh文件

#!/bin/bash //指定解析器
//下面就可以编写命令
echo "hello,world"

执行方法主要3种方法

1. sh或bash +需要执行的文件路径(不需要赋执行权限

2. 直接输入文件路径(需要执行权限

因为我们的执行界面本身就是一个bash,所以可以直接输入路径调用脚本,但是调用文件需要执行权限,所以我们需要对文件赋予执行权限。

3.路径前加上“.”或者 source(不需要赋执行权限

第三种脚本调用方式,与前两者不同,前两者相当于在当前bash内部加入一个子bash

而第三种方式相当于,在本bash中运行

这种差异主要体现在子父变量可使用范围的差异

父的全局变量可以被子bash获取,局部变量不可被子bash获取,子bash的变量父全都无法获得。

Shell变量

基本语法

定义变量 变量名=变量值

消除变量 unset 变量名

声明静态变量 readonly 变量 (其中静态变量无法被消除)

声明全局变量 export 变量名

变量定义规则

(1)变量名称可以由字母、数字和下划线组成,但是不能以数字开头,环境变量名建议大写。

(2)等号两侧不能有空格

(3)在 bash 中,变量默认类型都是字符串类型,无法直接进行数值运算。

(4)变量的值如果有空格,需要使用双引号或单引号括起来。

一些特殊的变量

$n(功能描述:n 为数字,$0 代表该脚本名称,$1-$9 代表第一到第九个参数,十以
上的参数,十以上的参数需要用大括号包含,如${10})

主要作用用于获取调用脚本时传入的参数

$# (功能描述:获取所有输入参数个数,常用于循环,判断参数的个数是否正确以及
加强脚本的健壮性)

#!/bin/bash
echo $1
echo $2
echo '=========$#==========='
echo "现在有"$#"参数"

$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)

$@ (功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)

$?(功能描述:最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一
个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明 上一个命令执行不正确了。)

[root@hadopp100 shells]# . a.sh 1 2 3
1
2
=========$#===========
现在有3参数
[root@hadopp100 shells]# echo $?
0

运算符

$((运算式)) 或 $[运算式]

计算5+3*6*(2+1)的值

[root@hadopp100 shells]# echo $[5+3*6*(2+1)]
59

条件判断

基本语法

[ condition ](注意 condition 前后要有空格

常用判断条件 

整数比较

-eq 等于(equal) -lt 小于(less than) -gt 大于(greater than)

-ne 不等于(not equal) -le 小于等于(less equal) -ge 大于等于(greater equal)

字符串之间的比较 ,用等号“=”判断相等;用“!=”判断不等。

按照文件权限进行判断

-r 有读的权限(read) -w 有写的权限(write) -x 有执行的权限(execute)

按照文件类型进行判断

-e 文件存在(existence) -f 文件存在并且是一个常规的文件(file) -d 文件存在并且是一个目录(directory)

多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一 条命令执行失败后,才执行下一条命令)

流程控制

if语句

if [ 条件判断式 ] 
then
    程序
elif [ 条件判断式 ] 
then
    程序 
else 
    程序 
fi

和Java,c语言的if语句类似这边不多解释

注意事项: ①[ 条件判断式 ],中括号和条件判断式之间必须有空格 ②if后要有空格

for循环

语法1

for (( 初始值;循环控制条件;变量变化 )) 
do
    程序
done


#使用举例
sum=0 
for((i=0;i<=100;i++)) 
do
    sum=$[$sum+$i]
done 
echo $sum

语法2

for 变量 in 值 1 值 2 值 3… 
do
    程序
done

#使用举例
for i in a b c
do
    echo "ban zhang love $i" 
done

这里值得注意的是

$*$@

这两者的区别就出现了,主要体现在获取值的过程中,如果我们用"",括住我们的参数

$ @会把传入的一个个分开处理

$* 会把传入的列表全部合成一个字符串,中间以" "分开

echo '=============$*=============' 
for i in "$*" 
#$*中的所有参数看成是一个整体,所以这个 for 循环只会循环一次 
do
    echo "$i" 
done
echo '=============$@=============' 
for j in "$@" 
#$@中的每个参数都看成是独立的,所以“$@”中有几个参数,就会循环几次 
do
    echo "$j" 
done

=============$*============= 
a b c d 
=============$@============= 
a
b
c
d

while 循环

while [ 条件判断式 ] 
do
    程序
done

与Java,c类似,这边不过多介绍

read 读取控制台输入

基本语法

read (选项) (参数)
①选项:

-p:指定读取值时的提示符;

-t:指定读取值时等待的时间(秒)如果-t 不加表示一直等待
②参数 变量:指定读取值的变量名

使用举例

#!/bin/bash
read -t 10 -p "你叫什么名字" n
echo $n

[root@hadopp100 shells]# . e.sh
你叫什么名字tony
tony

以上就是shell脚本编程的基础知识

来源于尚硅谷Linux课程,加以总结

如有侵权联系删

你可能感兴趣的:(学习,linux,bash)