CentOS 7 下 shell脚本的入门学习,(总结全面,看完就会)

本文详细介绍了CentOS7环境下Shell脚本的基础知识,包括如何执行脚本、基本命令如变量、数组、运算符、字符串操作、条件判断及循环结构。通过实例演示了变量赋值、数组操作、逻辑运算以及if语句和循环的使用,帮助初学者快速掌握Shell脚本入门。
摘要由CSDN通过智能技术生成

shell脚本入门学习

基本的CentOS 7下shell命令的学习


前言

shell是一个命令解释器,位于应用程序和操作系统之间

就是在操作系统和应用程序之间的命令翻译工具


一、如何执行?

CentOS 7 默认是使用 shell里的bash,shell脚本以.sh结尾,通过bash name.sh 来运行shell脚本

二、基本命令

1.helloworld

在屏幕输出helloworld

#! /bin/bash
echo "helloworld"

#!/bin/bash是指此脚本使用/bin/bash来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。

2.注释

单行注释和多行注释:

#这是一个单行注释

在前面加上 # 来注释一行

:<<字符
	被注释的内容
字符

任意字符即可,不过为了方便,一般使用 !来执行多行注释

:<<!
	被注释的内容
!

3.变量

普通变量 注意单引号和双引号的区别

  • 变量名=变量值 #等号左右不能有空格
  • 变量名=‘变量值’ #原样赋值给变量
  • 变量名=“变量值” #会对引号内的值进行解析,最后结果赋值给变量
a=123
echo "${a}" #123

a='${a}'
echo "${a}" #${a}

a=10
b="${a}"
echo "${b}" #10

习惯:数字不加引号,其他加引号

命令变量

  • 变量名称=‘命令’
  • 变量名称=${命令}
a='date' #方法返回一个时间
echo "${a}" #输出当前时间

变量的四种写法
一般写法(非标准)

  • $变量名
  • “$变量名”
  • ${变量名}

标准写法 "${变量名}"

readonly 变量名 (只读变量,不允许修改)
unset 变量名 (删除变量,使用后删除变量)


3.数组

直接上代码

arr=(a b c d e f g)
#输出数组对应下标的元素
echo "${arr[0]}"
echo "${arr[1]}"

#输出数组的元素
echo "数组为:${arr[*]}"

#对元素进行赋值
arr[1]=B
echo "数组为:${arr[@]}"

#输出数组的长度 前面加 #
echo "数组的长度为:${#arr[*]}"
echo "数组的长度为:${#arr[@]}"

输出结果为

a
b
数组为:a b c d e f g
数组为:a B c d e f g
数组的长度为:7
数组的长度为:7

定义数组: 等号两边不能有空格,值用空格隔开

数组名={值1 值2 值3 … 值n}

数组赋值:

数组名[数组下标]=值

获取属数组的值

${数组名[数组下标]}

获得数组的所有元素(两种写法)

${数组名[*]}
${数组名[@]}

获得数组的长度(得到数组所有长度在前面加上 # )

${#数组名[*]}
${#数组名[@]}

4.运算符

先上代码

#两数相加
num1=`expr 2 + 2`
echo "2+2的结果为:${num1}"

#两数相减
num2=`expr 2 - 2`
echo "2-2的结果为:${num2}"

#两数相乘 *在bash里属于特殊字符,有“”所有“ 的意思,需要用转义符 \
num3=`expr 2 \* 2`
echo "2*2的结果为:${num3}"

#两数相除
num4=`expr 2 / 2`
echo "2/2的结果为:${num4}"

a=10
b=12
num5=`expr ${a} + ${b}`
echo "变量 a = ${a} + 变量 b = ${b} 的值为:${num5}"

#自加(自减同理)
e=10
((e++))
echo "e++ 之后的值为 $e"

运行结果为:

2+2的结果为:4
2-2的结果为:0
2*2的结果为:4
2/2的结果为:1
变量 a = 10 + 变量 b = 12 的值为:22
e++ 之后的值为 11

通过上述代码,相信看出了运行格式

expr`变量 运算符 变量`

特别注意的是 expr两边的符号是 table键上面的引号,并不是平常我们写的单引号,并且运算中间必须用空格隔开

*在bash里属于特殊字符,运算时需要用 \来进行转义

5.字符串运算符

先上代码

a="aaa"
b="bbb"

# $?可以获取上一条的返回结果
[ "${a}" = "${b}" ]
echo "判断字符串是否相等,相等为0,否则为1 :$?"

[ "${a}" != "${b}" ]
echo "判断字符串是否不相等,不相等为0,否则为1:$?"

[ -z "${a}" ]
echo "判断字符串的长度是否为0,为零返回0,否则为1:$?"

[ -n "${a}" ]
echo "判断字符串的长度是否不为0,不为零返回0,否则为1:$?"

[ $"${a}" ]
echo "判断字符串是否为空,《不为空》 返回0,否则为1:$?"

echo "输出字符串的长度为:${#a}"

运行结果为

判断字符串是否相等,相等为0,否则为1 :1
判断字符串是否不相等,不相等为0,否则为1:0
判断字符串的长度是否为0,为零返回0,否则为1:1
判断字符串的长度是否不为0,不为零返回0,否则为1:0
判断字符串是否为空,《不为空》 返回0,否则为1:0
输出字符串的长度为:3

通过上述代码格式为:(两边必须有空格)

[ 变量a 运算符 变量b ]
# $? 可以获取上一条的返回结果

= 、!= 和一般代码运行格式一样,判断是否为空为 -z (zero) ,判断不为空为 -n (nozero)
一般情况下,返回值和名称相同,返回0 表示true ,1为false
例如 != 不相等返回 0(true) ,相等为 1(false)
判断是否为空比较特殊,不为空返回 0 (true) ,为空则为 1 (fasle)

6.关系运算符

先上代码

#判断大小必须为数字
#判断大小必须为数字
a=10
b=12

echo "a=${a} , b=${b}"
[ "${a}" -eq "${b}" ]
echo "判断是否相等,相等返回0,否则为1:$?"

[ "${a}" -ne "${b}" ]
echo "判断是否不相等,不相等返回0,否则为1:$?"

#-gt (greate than) 大于
#-lt (less than) 小于
#-ge (greate equals) 大于等于
#-le (less equals) 小于等于

输出结果

a=10 , b=12
判断是否相等,相等返回0,否则为1:1
判断是否不相等,不相等返回0,否则为1:0

格式:(同字符串运算)

[ 变量a 运算符 变量b ]

特别要注意的是
首先比较必须为数字,否则在运行时将会报 “期待整数表达式” 的错误
运算符为:

  • -eq (equal) 相等
  • -nq (noequal) 不相等
  • -gt (greate than) 大于
  • -lt (less than) 小于
  • -ge (greate equals) 大于等于
  • -le (less equals) 小于等于

7.布尔运算符

先上代码

a=10
b=20

[ ! "${a}" -eq "10" ]
echo " ! 对结果进行取反 $?"

# -o or  a < 5 || b > 10
[ "${a}" -lt 5 -o "${b}" -gt 10 ]
echo "-o 或运算 $?"

#-a and  a < 5 && b > 10
[ "${a}" -lt 5 -a "${b}" -gt 10 ]
echo "-a 或运算 $?"

运行结果为

 ! 对结果进行取反 1
-o 或运算 0
-a 或运算 1

格式:(同字符串运算)

[ 变量a 运算符 变量b ]

了解-o (or) 或运算 , -a (and) 且运算 , ! 取反运算 (前面必须有空格)

8.逻辑运算符

先上代码

a=10
b=20

#TRUE 为 0   FALSE 为1
[[ "${a}" -lt 100 && "${b}" -gt 100 ]]
echo "&&逻辑且的运行结果为:$?"

[[ "${a}" -lt 100 || "${b}" -gt 100 ]]
echo "||逻辑或的运行结果为:$?"

运行结果为

&&逻辑且的运行结果为:1
||逻辑或的运行结果为:0

格式 注意,逻辑运算符和其他运算符格式不同

[[ true && true ]] # 与运算 返回 0 (true) 
[[ false || false ]] # 或运算 返回 1 (false)

9.if判断

先上代码

a=10
b=20

if [ "${a}" -lt "100" ]
then
        echo "a < 100"
fi


if [ ! "${a}" -lt "100" ]
then
        echo "a > 100"
else
        echo "a < 100"
fi



if [ ! "${a}" -lt "100" ]
then
        echo "a > 100"
elif [ "${b}" -gt 10 ]
then
        echo "b > 10"
else
        echo "a < 100"
fi

输出结果为;

a < 100
a < 100
b > 10

可以看到,if的格式有三种

#简单的if判断
if [ 判断条件 ]
then
	执行代码
fi

#if else 判断
if [ 判断条件 ]
then
	执行代码
else
	执行代码
fi

if [ 判断条件 ]
then
	执行代码
elif [ 判断条件 ]
then
	执行代码
else
	执行代码
fi

注意

  • if为开始标志,反过来写的 fi 为结束标记
  • if 和 elif 下面需 then

10.选择语句

先上代码

a="hello"

case "${a}" in
"world")
        echo "世界"
         #相当于 break,必须要加上
        ;;
"hello")
        echo "你好" ;;
#相当于 default 当上述条件都不满足时执行,不是必须的
*)
        echo "其他"
        ;;
esac

运行结果为:

你好

选择语句的语法为:

casein
结果1)
	执行代码
	;; 
结果2)
	执行代码
	;;
esac

或者加上 default 判断

casein
结果1)
	执行代码
	;; 
结果2)
	执行代码
	;;
*)
	执行代码
	;;
esac

注意 ;; 必须添加

11.for 循环

先上代码

for var in a b c d
do
        echo "${var}"
done

#{1..10} 表示从1到10
for var in {1..10}
do
        echo "${var}"
done

结果为

a
b
c
d
1
2
3
4
5
6
7
8
9
10

for循环的语法为:

for 变量 in 范围
do 
	执行代码
done

注意

  • 范围 可以直接写 A B C D这样直接赋值的
  • 也可以写 {n…m} 表示从n到m
  • do表示循环开始, done表示循环结束

12.while 循环

先上代码

a=1
while [ "${a}" -le 10 ]
do
        echo "${a}"
        ((a++))
done

运行结果为

1
2
3
4
5
6
7
8
9
10

while循环的语法结构为:

while [ 判断 ]
do
	执行语句
done

类似于for循环,在使用时注意判断语句内变量的变化,否则可能导致死循环

13.shell函数 (方法)

先上代码

#无参无返回值
method1(){
        echo "hello world"
}

#有参无返回值
method2(){
        echo "第一个参数为:$1"
        echo "第二个参数为:$2"
}

#有参有返回值
method3(){
        echo "$1 + $2 的值:"
        return $(($1 + $2))
}

method1
echo "---------函数一执行了--------"

method2 "12" "13"
echo "---------函数二执行了--------"

method3 20 10
echo "$?"
echo "---------函数三执行了--------"

执行结果为:

hello world
---------函数一执行了--------
第一个参数为:12
第二个参数为:13
---------函数二执行了--------
20 + 10 的值:
30
---------函数三执行了--------

一共三总定义方式

#无参无返回
函数名(){
	执行代码(函数体)
}
#有参无返回
函数名(){
	执行代码(函数体)
	#输出第一个参数
	echo "$1"
	#输出第n个参数
	echo "$n"
}
#有参有返回
函数名(){
	执行代码(函数体)
	return $((返回值))
}
  • 在使用函数时,直接用函数名调用即可,若是有参函数 在后面 直接写上参数 ,例如 method 值1 值2
  • 在有参函数中,通过 $n 来获取第n个传递过来的参数

三、练习

要求 输入两个数,并且输入运算符,进行加减乘除运算 (除法不考虑分母为零的情况)

可以通过 read 变量 来获取从键盘输入的值
需要判断 输入的运算符,并且计算出相应的结果

代码可以这样写:

method(){
        cou=0
        echo "请输入第一个数:"
        read num1
        echo "请输入运算符数:"
        read operation
        echo "请输入第二个数:"
        read num2

        case "${operation}" in
        '+') cou=`expr ${num1} + ${num2}`
        ;;
        '-') cou='expr ${num1} - ${num2}'
        ;;
        '*') cou=`expr ${num1} \* ${num2}`
        ;;
        '/') cou=`expr ${num1} / ${num2}`
        ;;
        *) echo "${operation} 输入有误"
        ;;
        esac
        return ${cou}
}

method
echo "最后的结果为:$?"

运行结果

请输入第一个数:
10
请输入运算符数:
+
请输入第二个数:
20
最后的结果为:30

对上述知识的简单总结,如果你看到这里了,何不点个赞再走。

四、总结

如果全部看完,并且能够融汇贯通,表示shell脚本你已经入门了,未来还有更加高深的代码需要学习,本人主要学习java程序,对于shell脚本只学习到这里,如果你有更好的方法,欢迎一起交流学习。若对上述结果有任何不同观点,也欢迎一起探讨。

CentOS 7中运行shell脚本有几种方式。首先,可以使用bash命令来运行脚本,命令格式为bash name.sh。这种方式在当前的shell环境下执行脚本,并且脚本执行结束后,脚本内的变量保留在当前的shell中。 另一种方式是使用source或者./script命令来运行脚本,命令格式为source name.sh或者./name.sh。这种方式也是在当前的shell环境下执行脚本脚本执行结束后,脚本内的变量仍然存在于当前的shell中。 最后一种方式是使用sh命令来运行脚本,命令格式为sh name.sh。这种方式打开一个子bash shell来运行脚本脚本执行结束后,子shell内的变量随着进程结束而消失,如果想要保留脚本内的变量,则需要使用export命令将其声明为环境变量。 因此,在CentOS 7中,我们可以选择适合自己需求的方式来运行shell脚本。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [CentOS 7 下 shell脚本入门学习,(总结全面,看)](https://blog.csdn.net/weixin_46013527/article/details/118918829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于centos7学习总结 -- shell脚本](https://blog.csdn.net/qq_41854797/article/details/121310702)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值