【Linux】shell 脚本 (.sh) 编写及执行 您所在的位置:网站首页 shell脚本readlink 【Linux】shell 脚本 (.sh) 编写及执行

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

2024-05-23 01:35| 来源: 网络整理| 查看: 265

shell 脚本的编写及使用

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 创建文件脚本 filename="$(date +%Y-%m-%d)" echo "开始创建文件......" touch ${filename}_file{01..09}.log echo "创建成功" echo "$(ls) touchfile.sh

  运行结果

  

echo "开始创建文件......" #touch ${filename}_file{01..09}.log for i in `seq 1 5`;do filename="$(date +%Y-%m-%d_%H:%M:%S)" touch ${filename}_${i}_file.log sleep 2 done echo "创建成功;目录下文件如下:" echo "$(ls)" 以时间命名每隔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

if 判断语句; then 命令 elif 判断语句;then 命令 else 命令 fi 语法格式 # 不带else ((nums25))&&((nums, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于) read -p "请输入数字:" nums if [ $nums -lt 20 ];then echo "输入不能小于20" elif [ $nums -gt 25 ] && [ $nums -lt 42 ];then echo "25==42" else echo "恭喜" fi 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的个数(用于编写系统服务的启动脚本)

case 变量 in value1) command ;; value2) command ;; value3) command ;; *) command ;; esac 语法格式 read -p "奇偶判断,请输入一个数值:" nums r=$[$nums%2] case $r in 1) echo "奇数" ;; 0) echo "偶数" ;; esac

  运行结果

  

 

实例12: for 循环

for 变量名 in 循环的条件; do command done 语法格式 # 脚本中的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 循环

while 条件; do command done 语法格式 while :; do command done 监控脚本 a=7 while [ $a -ge 1];do echo "$a" a=$[$a-2] done

   运行结果

  

 

 

 实例14: 函数

# 函数 function 函数名() { command } # 调用 函数名 $1 $2 # 执行 sh shread.sh value1 value2 函数格式 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 "内容" >> 文件 将内容追加到文件中

 

-------------------------------------------------------------------------------------

如果万事开头难 那请结局一定圆满 @ Phoenixy

-------------------------------------------------------------------------------------


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有