一文快速入门Shell脚本_了解Sheel脚本基本命令
通过代码加注释的形式,列举了shell的基础操作,注释、变量、函数、循环等,帮助小白(像我一样)快速入门。用来练手的shell在线编辑器,别挑剔。屏幕右侧有个“胖胖”的目录,宽度小的放不下它,缩放一下页面就出来了。
注释
学语言,从注释开始。#!写在开头,用来指定shell程序的路径。单行用#号;多行::<<' 多行注释... '、:<<a 多行注释... a、:<<xx 多行注释... xx...。
#! /bin/bash
# 我是注释
:<<'
...多行注释...
'
文件包含
在一个脚本里加入另一个脚本。
. pwdfile #中间有个空格。pwdfile是脚本路径。
source pwdfile #同上。
向脚本传参数
在终端这样运行脚本:~/position.sh x y,x、y是两个参数,在脚本中可以获取参数信息。
# ~/god.sh x y
echo $0 #输出 god.sh脚本名,看作是第0个参数。
echo $1 #输出 x,第1个参数。
echo $2 #输出 y,第2个参数。
echo $# #输出 2,$#获得参数个数。
# 获取第10个及之后的参数加大括号 ${10}。$号可以显示系统变量,往下看。
变量
shell中有用户变量、系统变量、环境变量。
系统变量
echo $# # 程序参数个数。
$? # 上一个命令的返回值,正常为0,否则不为0。
$n # 执行脚本的第n个参数,n=0代表脚本名。
$* # 以"$1 $2 $3..."形式获取所有参数。
$@ # 以"$1""$2""$3"...的形式获取所有参数。
用户变量
num=12345555 #定义变量。中间不能有空格。
echo ${num} #使用变量,用$号。
echo $num #简写方式。
read num #从标准输入给变量赋值。
readonly num #使变量只读,不可改变也不可删除。
upset num #删除变量。如果删除只读变量,运行时会出错。
:<<'
字符串变量
'
s='BA' #单引号包含。单引号中内容时固定的,加在里面的变量无效,写的啥就是啥。
st='up,up,down,down,left,right,left,right,'${s} #可以在单引号外面加变量实现拼接。
str="${st},awsl" #双引号包含,中间可以加变量来拼接。str=上,上,下,下,左,右,左,右,BA,awsl。
echo ${#str} #中间加个#号获取字符串长度。此命令输出45。
echo abcd"efg"\" #转义了一个"号,输出abcdefg"。
echo abcd"efg #正确的错误示范,会报错。非转义的双引号当作定义字符串变量的标识,要成对出现,且不会显示。
echo 'one${peace}"' #输出one${peace}"。单引号内容固定,"号也会显示。单引号必须成对出现,转义的也不能单出来。
环境变量
| 名称 | 含义 |
|---|---|
| PATH | 决定shell将到那些目录寻找命令和程序 |
| HOME | 当前用户主目录路径 |
| LOGNAME | 当前用户登陆名 |
| HISTSIZE | 历史记录数 |
| HOSTNAME | 主机名称 |
| SHELL | shell路径 |
| LANGUGE | 语言相关的环境变量 |
| 当前用户邮件存放路径 | |
| PS1 | 主提示符,root用户是"#",普通用户是"$" |
| PS2 | 辅助提示符,默认是">" |
| TERM | 终端类型 |
| PWD | 当前工作目录的路径 |
数组
这只有一维数组。
array=(huo ge "wo") # 空格分开。
array[3]=zi # 下标从0开始,这里又添加了一个元素。
echo ${array[3]} # 输出zi。
echo ${array[@]} # 输出数组全部内容,huo ge wo zi 。*号可以代替@号。
echo ${#array[@]} # 输出4。数组的元素个数。
函数
函数定义后才能使用。函数包着多条命令,方便执行。
cxk(){ # 定义函数。
echo "这只是个函数"
return 2 # 可以返回0-255之间的数。省略时,返回最后一条命令的运行状态,正常为0。$?可以读取最后一条指令的返回状态,正常为0,可以利用$?获得return值。
}
cxk # 调用函数。
cxk c t r l # 调用函数时传递参数,用法和传入脚本的参数一样。
if与比较
if [ 4 -lt 5 ] # -lt用来判断左侧数是否小于右则数。数和符号之间的空格不能省略。
then # []中运算式是true时执行then,否则执行else。
{
echo "4小于5"
echo "没错"
}
else # else后面没有命令的话,就不要写else。
echo "4不就是小于5吗?"
fi
# 也可以写成一行。
if [ 4 -lt 5 ];then { echo "4小于5";echo "没错";};else echo "4不就是小于5吗?";fi
# then和else之间可以加多个elif then,用法与if then相同。
!布尔取非,-a布尔与运算(and),-o布尔或运算(or)。
字符串的比较用=、!=,另外,可以用参数-z、-n,比如[ -z $str ]、[ -n "buweiling" ],分别判断字符串长度是否为0、长度是否不为0。[ $str ],可以判断字符串变量str是否不为空。
[]内的运算用-o、-eq等,看做是一条shell命令,[[]]内用>=、&&、||等运算符号进行条件判断。(())用来做数值的判断。
比较符号:
| 符号 | 含义 |
|---|---|
| -eq | equal,左数是否等于右数 |
| -ne | not equal,左数是否不等于右数 |
| -lt | litter than,是否小于 |
| -gt | greater than,是否大于 |
| -le | litter、euqal,是否小于等于 |
| -ge | greater、equal,是否大于等于 |
test
测试命令,测试条件真假,是[]的另一种形式,常与if和循环配合使用,可以做数字、字符、文件相关的判断。
if test 4 -lt 5 # test 4 -lt 5和[ 4 -lt 5 ]一样。
then echo "4小于5"
fi
测试文件。
if test -e /home # -e判断文件是否存在,下表列出了其他常用的符号。test -e /home和[ -e /home ]一样。
then echo '文件已存在!'
else echo '文件不存在!'
fi
一些常用的文件比较符号:
| 符号 | 测试的文件含义 |
|---|---|
| -e | 是否存在 |
| -r | 是否存在且可读 |
| -w | 是否存在且可写 |
| -x | 是否存在且可执行 |
| -s | 是否存在且有字符 |
| -d | 是否存在且是目录 |
| -f | 是否存在且是普通文件 |
| -c | 是否存在且是字符型文件 |
| -b | 是否存在且是块文件 |
循环
shell有for循环、while循环、until循环,格式和常用语言的格式有些差异。
for cxk in c t r l
do echo $cxk
done
for(( a=1; a < 5; a=`expr $a + 1 ` )) # 反引号可以执行bash外的其他命令,expr可以计算表达式。for(( ; ; ))这样中间不加参数是无限循环。
do echo $a
done
a=1
while(( $a<=10 )) # (( $a<=10 ))和test $a -lt 10一样。while :和while true是无限循环。
do
echo $a
a=`expr $a + 1 `
done
a=1
until [ $a -eq 5 ] # 条件是true时停止循环。[ $a -eq 5 ]和 test $a -eq 5 一样。
do
echo $a
a=`expr $a + 1 `
done
循环中可以使用break和continue。
case-in多选择
love="can beat everything"
case $love in # case x in ... esac
"a") echo a ;; # )和;;是固定格式。
"b") { echo b; } ;;
"can beat everything") echo "love "$love ;;
esac
重定向
shell可以将输入、输出进行重定向。
Linux运行时会打开标准输入文件、标准输出文件、标准错误输出文件,也就是stdin、stdout、stderr,输入重定向指stdin的重定向,输出重定向指stdout的重定向。
| 命令 | 说明 |
|---|---|
| command > file | 将输出重定向到 file |
| command < file | 将输入重定向到 file |
| command >> file | 将输出以追加的方式重定向到 file |
| n > file | 将文件描述符为 n 的文件重定向到 file |
| n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file |
| n >& m | 将输出文件 m 和 n 合并 |
| n <& m | 将输入文件 m 和 n 合并 |
| << tag | 将开始标记 tag 和结束标记 tag 之间的内容作为输入 |
表中文件描述m、n可以是0、1、2中的一个,分别代表stdin、stdout、stderr。
参考
《嵌入式Linux系统开发教程》姜先刚,袁祖刚-电子工业出版社,2016.8
一文快速入门Shell脚本_了解Sheel脚本基本命令的更多相关文章
- 一文快速入门分库分表中间件 Sharding-JDBC (必修课)
书接上文 <一文快速入门分库分表(必修课)>,这篇拖了好长的时间,本来计划在一周前就该写完的,结果家庭内部突然人事调整,领导层进行权利交接,随之宣布我正式当爹,紧接着家庭地位滑落至第三名, ...
- shell脚本快速入门----shell基本语法总结
1.#!脚本的开头 #!/bin/bash 2.脚本属性 添加可执行属性,chmod +x 或使用"."运行,例如运行当前目录下的a.sh 可执行命令 ". ./a.sh ...
- 一文快速入门Docker
Docker提供一种安全.可重复的环境中自动部署软件的方式,拉开了基于与计算平台发展方式的变革序幕.如今Docker在互联网公司使用已经非常普遍.本文用十分钟时间,带你快速入门Docker. Dock ...
- 7.Jmeter 快速入门教程--录制复杂web测试脚本
Jmeter的功能简单,不需要有脚本语言的编写经验,纯图形界面添加测试场景, 用起来上手很快.但是如果手动添加每一个web(http/https)请求,费时又费力.而且有可能最后手动编写的和实际发的请 ...
- 一篇文章让你快速入门 学懂Shell脚本
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...
- Robot Framework 快速入门_中文版
目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...
- Shell 快速入门(十八):特殊符号的使用
在 Shell 语言中,经常会看到中括号和括号组成的特殊标识,例如:[].[[]].(()).$(()).().这些符号经常使我们非常迷惑,弄清楚它们之间的作用和区别非常必要. 在开始之前,我们先来学 ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- 如何快速学好Shell脚本? 转
如何快速学好Shell脚本? 目录 写作思路 知识体系 Shell 语言作为类 Unix 系统的原生脚本,有着非常实用的价值.但对于很多刚刚接触 Shell 脚本的同学来说,搞懂 Shell 语言 ...
随机推荐
- 苹果为啥不愿意替美国FBI解锁,这是一种创新态度?
国外媒体报道,苹果计划对iPhone进行安全更新,最新版的iOS会在手机锁定一个小时后禁用手机充电和数据端口,这意味着,消费者丢失手机或者非正常离开iPhone之后,可以通过锁定手机,来避免手机数据被 ...
- 让java不再难懂
废话不都说,直接上图哈 java基础思维导图整理.png 1.Java 简介.png 2.java主要特性.png 3.java发展历史.png 4.java 开发环境配置.png 5.java 基础 ...
- ReactJS - 组件的生命周期
组件的生命周期分为三个状态 Mounting: 已插入真实DOM Updateing: 正在被重新渲染 Unmounting: 已移出真实DOM React 为每个状态都提供了两种处理函数,即函数在进 ...
- 62)PHP,提示跳转
由于就是一个普通的页面展示,提示的样式,可以轻松定制! 语法: Header()后的代码会执行,因此在处理好跳转相关操作后,脚本也应该被DIE掉! 案例中实现跳转 封装一个可以完成跳转的方法,需要时, ...
- 75)PHP,session在使用时的一些语法问题
(1)cookie仅能存字符串类型,但是session能存任何数据类型,比如: 然后我在session_2.php中输出这个session_1.php的数据: 结果展示: 我得在浏览器的地址栏中先请求 ...
- 【Linux_Shell 脚本编程学习笔记五、Oracle JDK1.8 安装shell 脚本】
脚本使用说明: 首先在脚本的同级目录下有个 jdk的安装包 脚本和安装包必须在同级目录下才能够安装(脚本没有优化,还可以使用 wget 从网上下载指定版本的 jdk 安装包) #!/bin/sh ...
- 安装VSCODE和typora黑屏
工欲善其事必先利其器,本来是为了学git为了保存代码,然后网上一顿搜索研究之后发现,用git来保存笔记也不错,因为现在用的onenote搜索实在在在在是太不方便了,除了搜索不行,其他方面她还是很好的, ...
- 吴裕雄--天生自然python学习笔记:Python3 日期和时间
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能. Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间. 时间间隔是以秒为单位的浮点小数. ...
- 升级mongodb数据库2.6.6到3.0.3,切换引擎,主从同步数据
只升级mongodb的版本极为简单,更新/替换 bin/目录下的可执行文件即可. debian和osx上的升级,按步骤来,没什么好说的. http://docs.mongodb.org/manual/ ...
- ionic3 生命周期钩子
ionViewDidLoad 页面加载完成触发,这里的"加载完成"指的是页面所需的资源已经加载完成,但还没进入这个页面的状态(用户看到的还是上一个页面). 需要注意的是它是一个很傲 ...