Linux系统中的 Shell 编程

一.Shell Script 介绍

1.概念

  • shell脚本是包含一系列命令的文本文件
  • shell读取此文件并执行命令

2.应用场景

  • 重复性操作
  • 批量事务处理
  • 自动化运维
  • 定时任务执行

3.demo:第一个Shell脚本test.sh

  • 输入 : vi test.sh ,输入如下内容然后保存退出
#!/bin/bash
echo "hello, shell,you're very pretty"
  • 输入: chmod +x test.sh ,赋予文件执行权限
  • 输入: ./test.sh ,执行该脚本文件,效果如下:
    效果
  • 注意:#!是一个约定的标记,他告诉系统这个脚本需要用解释器来执行

二.变量

1.变量的定义和使用

1)demo01

  • 1.新建一个param.sh,写入如下内容
#!/bin/bash
#变量定义不需要声明类型
abc=123
#变量的值可以用$符号获取
aaa=$JAVA_HOME
aaa=abc
#间接引用,用aaa的值去找变量,若这个变量有值,分配给def
def=${!aaa}
#找abc的第一个1替换为h
abc=${abc/1/h}
#使用反引号将该命令的结果赋值给变量
path=`pwd`
#打印结果
echo ${aaa}aaa${abc}
echo $def
echo $path
  • 2.给与执行权限,并执行文件,结果如下:
    变量

2)demo02:整数表达式运算

  • 新建文件,内容如下:
 #!/bin/bash
#方式一:
a=1
b=2
((c=$a+$b))
echo c的值: $c
#方式二:
d=$[ $a+$b ]
echo d的值: $d
  • 给与执行权限执行结果如下:
    执行效果

2.预定义变量

选项 说明
$# 命令行参数或位置参数的数量
$? 最近一次执行的命令或shell脚本的出口状态
$* 表示所有的位置参数,其值是所有位置参数的值
$$ 变量是shell脚本里面的进程id,shell脚本经常使用$$变量组织临时文件名,确保文件名唯一性

3.位置变量

  • $n(n为数字) : $0 代表命令本身,$1-$9代表顺序参数编号,大于10的话使用括号,如${10}
  • 示例如下:
#!/bin/bash
echo 参数个数: $#
echo 所有位置参数: $*
echo '上一句结果(执行成功为0):' $?
echo 进程id: $$
echo 当前命令: $0
echo 第一个参数: $1
echo 第二个参数: $2
  • 执行结果如下:
    执行结果

三.数值关系运算符

1.数值关系运算符

选项 说明
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

2.逻辑运算符

选项 说明
-a 或者 && 逻辑与
-o 或者 || 逻辑或
! 逻辑否

3.字符串运算符

选项 说明
= 等于
!= 不等于
-z 判断是否为空

4.文件运算符(写在文件或目录前面)

选项 说明
-d 判断是否为目录
-e 判断目录或文件是否存在
-f 判断是否为文件
-r 判断文件或目录针对当前用户是否可读
-w 判断文件或目录针对当前用户是否可写
-x 判断文件或目录针对当前用户是否可执行

四.流程控制语句

<- bash shell脚本中变量无法存储布尔值,布尔值只能用于条件判断,条件中非空的话结果都为true >

if语句:

1.if语句:

if 
then
fi

2.if-else语句:

if
then	
	...
else
	...
fi

3.if-else-if语句:

if
then
	...
elif
then
	...
else
	...
fi

for循环:

1.普通for循环:

for((a=1;a<=5;a++))
do
	...
done

2.增强for循环:

for a in param1 param2 param3 ...
do
	...
done

while循环:

a=1
while [ a -le 5 ]
do
	...
	let "a++"
done

case语句:

case 变量 in
	值1)
		...
		;;
	值2)
		...
		;;
	*)
		...
		;;
esac

五.shell的函数

  • 语法如下:
函数名(){
#	函数体具体代码
}
函数名-->注意没有括号直接用函数名调用
  • 示例:求1-100的和
#!/bin/bash
read -p "请输入一个大于1的整数:" n
a(){
        count=0
        for((a=1;a<=n;a++))
        do
                ((count=$count+$a))
        done
        echo 总和为: $count
}
a

-运行结果如下:
100和

猜你喜欢

转载自blog.csdn.net/sun_0128/article/details/106896396