当前位置: 首页 > 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常用命令
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • CentOS7简单部署NFS
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Fastjson的基本使用方法大全
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java面向对象及其三大特征
  • Laravel核心解读--Facades
  • Map集合、散列表、红黑树介绍
  • node.js
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 给初学者:JavaScript 中数组操作注意点
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 每天10道Java面试题,跟我走,offer有!
  • 批量截取pdf文件
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端知识点整理(待续)
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微信小程序实战练习(仿五洲到家微信版)
  • 我的面试准备过程--容器(更新中)
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ionic入门之数据绑定显示-1
  • ionic异常记录
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (3)选择元素——(17)练习(Exercises)
  • (9)STL算法之逆转旋转
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转载)hibernate缓存
  • (转载)从 Java 代码到 Java 堆
  • (转载)利用webkit抓取动态网页和链接
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .Net Redis的秒杀Dome和异步执行
  • .NET Standard 的管理策略
  • .Net Web项目创建比较不错的参考文章