Linux基础Day03Shell脚本

一、Shell脚本

(一)shell脚本简介

1.shell:命令的有序集合。是一个解释型的语言。

2.shell脚本的创建步骤:

  • 创建:闯将一个.sh文件
  • 给文件赋予执行权限:chmod 755 文件名
  • 编辑脚本:vim 文件名
  • 执行脚本:./脚本文件

3.shell变量:shell没有数据类型,所有数据均视为字符串。

#变量定义
#用户自定义变量
变量名=#变量引用:本质是一个字符串替换
$变量名
#位置变量和预定义变量:是系统定义好的一些变量,可以直接使用,代表一些特定的值
#位置变量
#$n:命令行的第n个参数
#预定义变量:$@、$*——表示命令行的所有参数,$#——命令行所有参数的个数,$?——存储一个命令执行的结果,0表示执行成功,1表示执行失败,$$存储当前脚本的运行ID。
#环境变量:是由操作系统预定义的一些由终端或用户系统其他情况而决定值的变量。
#$PWD、$USER

(二)shell程序和语句

(1)功能性语句

  1. echo:输出
  2. read:输入。
  • 使用方法:read 变量名1 变量名2 …… 变量名n
  • 输入一空格分隔,以单词为单位放入对应变量中;若单词数多余变量数,则最后一个变量赋值为剩下的所有单词;若单词数少于变量数,则其他变量赋值空“”。
  1. expr:算术运算命令
  • 使用方法:expr 表达式(变量 运算符(+、-、\*、\、%) 值等之间必须有一个空格)
  • 将运算的结果赋值给变量:变量名=`expr 表达式`
  1. test:测试语句。一般不单独使用,常与if结合。shell中测试真假,可以对3种对象进行操作:字符串、整数、文件属性。
  • 字符串测试:

s1 = s2 测试两个字符串的内容是否完全一样

s1 != s2 测试两个字符串的内容是否有差异

-z s1 测试s1字符串的长度是否为0

-n s1 测试s1字符串的长度是否不为0

  • 整数测试:

a -eq b 测试a与b是否相等

a -ne b 测试a与b是否不相等

a - gt b 测试a是否大于b

a -ge b 测试a是否大于等于b

a -lt b 测试a是否小于b

a -le b 测试a是否小于等于b

  • 文件属性测试

-d name 测试name是否为一个目录

-e name 测试一个文件是否存在

-f name 测试name是否为普通文件

-L name 测试name是否为符号链接

-r name 测试name文件是否存在且为可读

-w name 测试name文件是否存在且为可写

-x name 测试name文件是否存在且为可执行

-s name 测试name文件是否存在且其长度不为0

f1 -nt f2 测试文件f1是否比文件f2更新

f1 -ot f2 测试文件f1是否比文件f2更旧

(3)结构性语句

  1. if分支结构:
  • 结构:

if [测试表达式]

then

语句块 表达式为真执行

eles

语句块 表达式为假执行

fi

  • if嵌套:

if [测试表达式]

then

​ if [测试表达式]

​ then

​ 语句块 表达式为真执行

​ eles

​ 语句块 表达式为假执行

​ fi

eles

语句块 表达式为假执行

fi

  • 复杂结构语句:

if [[ 表达式 ]] &&[[ 表达式 ]]

then

else

fi

  • 表达式取反

if[ ! 表达式]

then

fi

练习:写一个脚本,输入一个文件名,用参数传递,判定文件存在否?是否为一个目录?是否为普通文件,且是空文件,就删除它。


  1. case结构:

case 字符串条件 in

​ 匹配字符串1)

​ shell语句

​ ;;

​ 匹配字符串2)

​ shell语句

​ ;;

​ *)#该处匹配任何语句

​ shell语句

​ ;;

esac

  1. for循环结构:

形式1:

for ((I = 0 ; I <= 10 ; I++ ))

do

​ 命令块

done

形式2:

for 变量名 in 参数列表

do

​ 命令块

done

练习:

  • 创建10个文件
#!/bin/bash

for (( I = 0 ; I <= 10 ; I++ ))
do
	touch file_$I.txt
done
  • 打印当前目录中的所用空文件
#!/bin/bash

LIST=`ls`
for FILE in $LIST
do
	if [ ! -s $FILE ]
	then
		echo "文件$FILE是空文件!"
	fi
done
  • 编写一个脚本,将当前目录中的所有文件全部备份,文件名为:源文件名.back。
#!/bin/bash

LIST=`ls`
for FILE in $LIST
do
	case $FILE in
		file*)
		cp $FILE ./$FILE\_back
		;;
esac
done
  • 字符串截取(不匹配字符)

符号 含义解析
KaTeX parse error: Expected '}', got '#' at position 8: {string#̲substring} 从变量{string}的开头, 删除最短匹配${substring}的子串
KaTeX parse error: Expected '}', got '#' at position 8: {string#̲#substring} 从变量{string}的开头, 删除最长匹配${substring}的子串
KaTeX parse error: Expected '}', got 'EOF' at end of input: …%substring} 从变量{string}的结尾, 删除最短匹配${substring}的子串
KaTeX parse error: Expected '}', got 'EOF' at end of input: …%substring} 从变量{string}的结尾, 删除最长匹配${substring}的子串

  1. while循环语句:

while [ 命令或表达式 ]

do

​ 命令表

done

#!/bin/bash

I=1
SUM=0
while [ $I -ne 101 ]
do
	SUM=`expr $SUM + $I`
	I=`expr $I + 1`
done
echo "SUM=$SUM"

(三)函数

  1. 格式:

function_name( )

{

​ 函数体

}

function functio_name( )

{

​ 函数体

}

练习:

#!/bin/bash

function f ( )
{
	echo "hello world"
	echo $1
	return 0
}
f ok
P=`f ok`#P中存放函数f的打印内容
echo "P=$P"
f ok
echo $?
#脚本调用其他脚本
A=`./hello.sh`
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值