当前位置: 首页 > news >正文

shell简单使用介绍

脚本的基本元素

  1. 声明,在解释并执行当前脚本文件中的语句之前,需要声明使用的命令解释器

#一般写的解释器为
#!/bin/bash

这里的#不再是注释了,而是必要的声明

  1. 命令,也就是需要执行的语句

  1. 注释,对代码进行解释说明

分为单行注释和多行注释

单行注释 以#开头的一整行
#这里是注释
#这里也是注释

多行注释 使用冒号“:”配合here document可实现
:<<block 
这里是注释
这里也是注释
这里还是注释
block
  1. 赋予rx的权限

shell脚本编写规则

  1. 建议脚本文件名应该简单清晰明了,看了就知道意思

  1. 文件开头指定脚本解释器 #!/bin/sh或者#!/bin/bash

  1. 在开头写明版本特权等信息

  1. 尽量使用英文注释

shell常用的命令

echo

echo是用于终端打印的基本命令,默认情况下,echo 在每次调用后会添加一个换行符

[root@localhost shell]# echo hello
hello
[root@localhost shell]# echo "hello world"
hello world
[root@localhost shell]# echo "hello;world"
hello;world
[root@localhost shell]# echo hello;world
hello
bash: world: command not found...
Failed to search for file: /mnt/BaseOS was not found

#注意这里的双引号""用来包含整个语句,防止被;打断语句

echo参数

说明

-n

不换行输出

-e

解析转义字符

\n

换行

\r

回车

\t

制表符

\b

退格

\v

纵向制表符

[root@localhost shell]# echo -n why so serious
why so serious[root@localhost shell]# 
[root@localhost shell]# echo -e why\tso\tserious
whytsotserious
[root@localhost shell]# echo -e "why\tso\tserious"
why    so    serious

eval

命令格式:eval args

功能:当shell程序执行到eval语句时,shell读入参数args,并将它们组合成一个新的命令,然后执行

[root@localhost shell]# a='shuju;head -1 /etc/passwd'
[root@localhost shell]# echo $a
shuju;head -1 /etc/passwd
[root@localhost shell]# eval echo $a
shuju
root:x:0:0:root:/root:/bin/bash

exec

命令能够在不创建新的子进程的前提下,转去执行指定的命令,当指定的命令执行

完毕后,该进程就终止了

export

export设置或者显示环境变量

read

read 是一个重要的 bash 命令,用于从键盘或标准输入读取文本,我们可以使用 read 命

令以交互形式读取来自用户的输入

通常我们按下回车键表示命令输入完成,但是很特殊情况下,我们需要基于字符数或者

特定字符来表示命令输入完成

-p prompt:设置提示信息
-t timeout:设置输入等待时间,单位默认为秒
[root@localhost shell]# read -t 10 -p "please input your name:" name
please input your name:me
[root@localhost shell]# echo $name
me
[root@localhost shell]# echo -n "please input your name:"; read name1 name2
please input your name:me you
[root@localhost shell]# echo $name1
me
[root@localhost shell]# echo $name2
you

shift

在程序中每使用一次shift语句,都会使所有的位置参数依次向左移动一个位置,

并使位置参数$#减1,直到减到0为止

exit

退出shell程序

shell脚本的执行方式

  • bash ./filename.sh——产生子进程,再运行,使用当前指定的bash shell去运行

  • ./filename.sh

产生子进程,再运行,使用脚本里面指定的shell去运行。使用该种方式

执行需要x权限

  • source ./filename.sh

source命令是一个shell内部命令,其功能是读取指定的shell程

序文件,并且依次执行其中的所有的语句,并没有创建新的子shell进程,所以脚本里面所有创

建的变量都会保存到当前的shell里面

  • .filename.sh——和source一样,也是使用当前进程执行

首选我们写一个以 .sh结尾的文件

vim read01.sh

#!/bin/bash

read -n1 -p "DO you want wo continue [Y/N]" answer
case $answer in
        Y|y)
echo "fine,continue";;
        N|n)
echo "ok,good bye";;
        *)
echo "error choice";;
esac
exit 0

使用各种方法执行它

这里使用第一种方法

[root@localhost shell]# bash ./read01.sh 
DO you want wo continue [Y/N]yfine,continue

相关文章:

  • 关于中级开发工程师常问的面试题
  • 蓝桥杯刷题第二十天
  • 二叉树(数据结构系列9)
  • mybatis-plus的批量新增insertBatchSomeColumn
  • Linux内核IO基础知识与概念
  • Java - 配置中心初体验
  • 面试--每日一经
  • 算法训练营第五十九天|LeetCode647、516
  • 音视频开发—MediaCodec 解码H264/H265码流视频
  • 【python进阶】序列切片还能这么用?切片的强大比你了解的多太多
  • 内网升级“高效安全”利器!统信软件发布私有化更新管理平台
  • 什么是Vue
  • [图像识别]关于cv2库无法安装的故障问题解决,全网最全解决方案!本人亲身测试,参考了stackoverflow、51CTO等博客文章总结而成
  • 菜鸟刷题Day5
  • 22 k8s常用命令
  • 【译】JS基础算法脚本:字符串结尾
  • $translatePartialLoader加载失败及解决方式
  • Hibernate最全面试题
  • HTTP 简介
  • IP路由与转发
  • nodejs实现webservice问题总结
  • SpringCloud(第 039 篇)链接Mysql数据库,通过JpaRepository编写数据库访问
  • Zsh 开发指南(第十四篇 文件读写)
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 记录:CentOS7.2配置LNMP环境记录
  • 免费小说阅读小程序
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 正则表达式-基础知识Review
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​渐进式Web应用PWA的未来
  • #NOIP 2014#Day.2 T3 解方程
  • $L^p$ 调和函数恒为零
  • (09)Hive——CTE 公共表达式
  • (1)STL算法之遍历容器
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (8)STL算法之替换
  • (C++17) std算法之执行策略 execution
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • (备忘)Java Map 遍历
  • (一)u-boot-nand.bin的下载
  • (转)Unity3DUnity3D在android下调试
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET MVC第三章、三种传值方式
  • .NET 设计模式初探
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .netcore如何运行环境安装到Linux服务器
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • @RequestMapping-占位符映射
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测