【Linux】shell 脚本 (.sh) 编写及执行

【Linux】shell 脚本 (.sh) 编写及执行

shell脚本

shell脚本就是一些命令的集合

#!/bin/bash

echo "文件开头代表:该文件使用的是bash语法"

一、运行.sh文件

方法一:当前文件执行.sh 文件

# 文件必须含有x执行权限 [文件赋x权限:chmod u+x hello.sh]

./test.sh

# 文件可以没有x权限

sh test.sh

方法二:绝对路径执行.sh 文件

/home/test/test.sh

./home/test/test.sh

sh /home/test.test.sh

查看运行过程

sh -x test.sh

运行预览

二、脚本编写

实例1:输出内容到控制台

# test.sh内容

echo "test shtest"

运行结果

实例2:变量格式: “变量名=变量的值”。当在脚本中引用变量时需要加上’$’符号或者“${变量}”

# 变量 var_name ;引用变量 $var_name

var_name="test.sh"

echo "test $var_name"

执行结果

实例3: 复制文件

# 变量 `date……` [`非单引号,而是反单引号]

var_name="test.sh"

echo "test $var_name"

cp /home/appuser/ntest/$var_name /home/appuser/cptest/`date "+%Y-%m-%d-%H:%M:%S"`--$var_name

执行结果

实例4:将执行命令的结果用作变量输出

# 变量

var_name="test.sh"

var_para=$(ls)

echo "test输出变量: $var_name"

echo "test输出执行命令的结果变量:${var_para}"

执行结果

实例5: 用户输入 表示in_name变量的值需要用户通过键盘输入得到

# 写法一:read -p 选项类似echo的作用

read -p "请输入您的名字:" in_name

echo "您输入的名称为:$in_name"

# 写法二:会存在换行输入

echo "请输入你的年龄:"

read in_age

echo "您输入的年龄是:$in_age"

运行结果

实例6: 当前时间为变量,创建文件

now_date=$(date "+%Y-%m-%d_%H:%M:%S")

echo "当前时间:$now_date"

# 批量创建文件

touch file{01..03}_$now_date.log

#touch ${now_date}_file{04..07}.log

touchfile.sh

运行结果

以时间命名每隔2s创建1个文件

运行结果

实例7: 计算 数学计算要用’[ ]’括起来并且外头要带一个’$’

# 暂停2s

sleep 2

# 变量

a=1

b=3

# 计算a、b之和

sum=$[$a+$b]

echo "sum is $sum"

运行结果

实例8: 预设变量

# $1的值就是在执行的时候输入的1,而$2的值就是执行的时候输入的$2 $0代表文件名

echo "$0 $1 $2"

sum=$[$1+$2]

echo $sum

运行结果

实例9: 逻辑判断 if

语法格式

# 不带else ((nums<20))是因为.sh中,用一个小括号或者不用都会报错

read -p "请输入数字:" nums

if ((nums<20));then

echo "输入不能小于20"

fi

# 带else

read -p "请输入数字:" nums

if ((nums<20));then

echo "输入不能小于20"

else

echo "恭喜"

fi

elif (())

if else elif []

运行结果

注释: -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)

实例10:判断文档属性

# 格式为: if [ -e filename ] ; then

# -e :判断文件或目录是否存在

if [ -e touchfile.sh ];then

echo "touchfile.sh 文件存在"

fi

#-d :判断是不是目录,并是否存在

if [ -d touchfile.sh ];then

echo "是目录"

else

echo "touchfile.sh 不是目录"

fi

#-f :判断是否是普通文件,并存在

if [ -f touchfile.sh ];then

echo "touchfile.sh 是普通文件"

fi

#-r :判断文档是否有读权限

if [ -r touchfile.sh ];then

echo "touchfile.sh 有读权限"

fi

#-w :判断是否有写权限

if [ -w touchfile.sh ];then

echo "touchfile.sh 有写权限"

fi

#-x :判断是否可执行

if [ -x touchfile.sh ];then

echo "touchfile.sh 是可执行文件"

fi

运行结果

实例11: 逻辑判断 case; 不限制value的个数(用于编写系统服务的启动脚本)

语法格式

read -p "奇偶判断,请输入一个数值:" nums

r=$[$nums%2]

case $r in

1)

echo "奇数"

;;

0)

echo "偶数"

;;

esac

运行结果

实例12: for 循环

语法格式

# 脚本中的seq 1 5 表示从1到5的一个序列

for i in `seq 1 5`;do

echo $i

done

运行结果

for i in `ls`; do echo $i; done

#for i in `cat test.txt`; do echo $i; done

运行结果

实例13: while 循环

语法格式

监控脚本

a=7

while [ $a -ge 1];do

echo "$a"

a=$[$a-2]

done

运行结果

实例14: 函数

函数格式

function sun(){

sum=$[$1 + $2]

echo $sum

}

sun $1 $2

运行结果

拓展

问题1:变量未找到:test.sh: line 2: var_name: command not found

问题原因:等号两遍的变量名和值 之间不能存在空格

知识点:

# 查看日历

cal # 查看当月日历

cal 2022 # 查看年份日历

运行结果

# :输出重定向,以覆盖的形式一个文件的内容写入到另一个文件 >>:追加:将文件的内容追加到另一个文件的末尾 语法: ls -l >文件 将列表的内容写入到文件(覆盖原有内容) ls -al >>文件 将列表的内容追加到文件的末尾 cat 文件1 > 文件2 将文件1的内容写入到文件2中(覆盖后者文件的内容) echo "内容" >> 文件 将内容追加到文件中

相关推荐

十大手机证件照软件 自拍证件照软件哪个好 制作证件照app推荐→MAIGOO生活榜
失落的王权
国内在365投注

失落的王权

📅 07-12 👁️ 2320
iOS版本历史
国内在365投注

iOS版本历史

📅 07-31 👁️ 5762