当前位置: 首页 > 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常用命令
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • ES6 ...操作符
  • es6--symbol
  • ES6核心特性
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Mysql数据库的条件查询语句
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • SpringBoot几种定时任务的实现方式
  • Vultr 教程目录
  • windows下使用nginx调试简介
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 如何用vue打造一个移动端音乐播放器
  • 微信公众号开发小记——5.python微信红包
  • 以太坊客户端Geth命令参数详解
  • python最赚钱的4个方向,你最心动的是哪个?
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (篇九)MySQL常用内置函数
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转)原始图像数据和PDF中的图像数据
  • (转载)Google Chrome调试JS
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET CLR Hosting 简介
  • .net Signalr 使用笔记
  • .NET Standard 的管理策略
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET 设计一套高性能的弱事件机制
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • /etc/motd and /etc/issue
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @ModelAttribute 注解
  • [ C++ ] STL_list 使用及其模拟实现
  • [17]JAVAEE-HTTP协议