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 "内容" >> 文件 将内容追加到文件中

【Linux】shell 脚本 (.sh) 编写及执行的更多相关文章

  1. Linux | Shell脚本的编写

    Shell 脚本的介绍 Shell脚本通过Shell终端解释器当作人与计算机硬件之间的翻译官,用户可以通过它执行各种命令,不仅有简单的,还有复杂的,比如:判断.循环.分支等这些高级编程中才有的特性.S ...

  2. Linux shell脚本基础学习详细介绍(完整版)二

    详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...

  3. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  4. 详细介绍Linux shell脚本基础学习

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  5. 【学习】Linux Shell脚本编程

    1.脚本的组成和执行 Linux shell脚本的结构并不复杂,其主要由变量.内部命令以及shell的语法结构和一些函数.其他命令行的程序等组成,以下是一个简单的shell脚本. #!/bin/bas ...

  6. linux ——shell 脚本

                                                      linux—shell 脚本  精简基础                 2018/10/30 13 ...

  7. LINUX SHELL脚本攻略笔记[速查]

    Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述 ...

  8. Linux shell脚本基础学习详细介绍(完整版)一

    Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...

  9. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  10. Shell脚本的编写及测试

                                                      Shell脚本的编写及测试 1.1问题 本例要求两个简单的Shell脚本程序,任务目标如下: 编写一 ...

随机推荐

  1. 基于Redis有序集合实现滑动窗口限流

    滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间段内的请求次数.通过动态地滑动窗口,可以动态调整限流的速率,以应对不同的流量变化. 整个限流可以概括 ...

  2. Jmeter使用(1)_返回结果作为下一个的参数

    一.用户登录返回结果 {{"code":200, "token":"dbfab2d6c79e4981a86775f"}} 二.查询信息接口h ...

  3. 数字世界中的纸张——理解 PDF (转载)

    转载自 https://type.cyhsu.xyz/2018/09/understanding-pdf-the-digitalized-paper/ 引言 PDF 是我们打交道最多的文件格式之一.提 ...

  4. SpringBoot(九) - Swagger

    1.依赖 <!-- swagger 核心 --> <dependency> <groupId>io.springfox</groupId> <ar ...

  5. 第三章 (Nginx+Lua)Redis/SSDB安装与使用

    目前对于互联网公司不使用Redis的很少,Redis不仅仅可以作为key-value缓存,而且提供了丰富的数据结果如set.list.map等,可以实现很多复杂的功能:但是Redis本身主要用作内存缓 ...

  6. LinkedList可以同时作为堆栈和队列使用

    Java里的LinkedList可以同时作为堆栈和队列使用,因此在使用的时候总是会弄混他们的方法,此文就简单总结一下作为不同数据结构使用时的用法. 作为队列   方法 声明 任意两种方法: 一是直接声 ...

  7. 独立开发经验谈:我是如何借助 Docker 环境变量让客户 1 分钟上线客服系统的

    我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营 ...

  8. I2C死锁产生机理与解决方法

    在I2C实际使用过程中,最容易出现的一个问题就是死锁 ,其主要表现为:SCL持续为高,SDA持续为低. 产生机理 I2C死锁产生的机理是:当Slave输出应答信号或者输出数据0时,Master发生异常 ...

  9. Q:su命令无法切换用户问题,密码正确可登录

    一.文件权限问题 查看文件权限: ll -a /bin/su /usr/bin/passwd 正确的结果为: 错误的结果为: suid和普通x执行权限 s:当普通用户使用su的时候,采用的是owner ...

  10. 男人八题-点分治-Acwing252.树

    Acwing252.树 题目分析 树中的路径分为三种 路径两端在同一个子树 路径两端在不同子树 路径有一端是重心 因此可以分情况处理, 对于第一种情况可以进行递归处理, 第二种情况需要使用容斥原理求得 ...