Shell入门
前言
日常用Python多一些,不过很多时候shell脚本更简单实用一些,所以有必要熟悉一下shell脚本。当然shell有他特定的一些场景,比方说我曾经改过一个vpn断线自动重连的脚本,简单实用。
另:本文比较简单,算是入门简述,类似于30分钟入门的东西,想详细看的可以去搜其他文章,很多~
注释
这个比较简单,和很多语言都一样,#后面的就是注释,代表本行是注释,执行的时候会被忽略,没有多行注释。
注:
- 如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
- vim里有更简单的操作 - -
变量
变量的定义
- 首个字符必须为字母(a-z,A-Z)。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
- 使用等号赋值,变量名和等号之间不能有空格
如:
name="wang"
使用变量
变量名前面加$即可,同时推荐给变量名加花括号(可选,部分场景下必选),例如(注意最后两行,如果不加花括号会导致系统认为firstNamewang是一个变量):
echo $name
read firstName
echo "firstName=$firstName"
echo "firstNmae=${firstName}"
echo "name=$fistNamewang"
echo "name=${firstName}Wang"
其他操作
- 只读变量,变量前加
readonly,如readonly name,此操作后不得再重新赋值 - 删除变量,
unset name,此语句后不得再使用此变量 - 读取输入,见上面使用变量处
read firstName,此处即为获取标准输入 - 一些转义字符,使用
echo -e xxx可以转义成功
特殊变量
| 变量名 | 含义 |
|---|---|
| $0 | 当前脚本的文件名 |
| $n | 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。 |
| $# | 传递给脚本或函数的参数个数。 |
| $* | 传递给脚本或函数的所有参数。 |
| $@ | 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同 |
| $? | 上个命令的退出状态,或函数的返回值。 |
| $$ | 当前Shell进程ID。对于 Shell 脚本,就是这些脚本所在的进程ID。 |
PS: $* 和 $@ 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含时,都以"$1" "$2" … "$n" 的形式输出所有参数。
但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体,以"$1 $2 … $n"的形式输出所有参数;"$@" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。
字符串
单引号,双引号
单引号里字符串原样输出,也就是说转义和变量名都是无效的,同时单引号里不能有单引号,双引号则不会。所以推荐双引号就可以了。
获取长度
string='abcd'
echo ${#string} #输出 4
数组
定义
小括号代表数组,使用空格来间隔,不支持多维数据,下标从0开始,如:
person=(name1 name2 name3)
persons = (
name1
name2
name3
)
people[0]='xxx'
people[1]='xxxx'
获取长度
获取长度,与获取字符串长度一样:
length=${#array_name[@]}
length=${#array_name[*]}
lengthn=${#array_name[n]}
echo命令
一般的使用没什么可说的,说几个特殊的:
- 显示结果重定向到文件,
echo "xxx" > file_name - 执行命令,
date
if else
if [ expression ]
then
Statement(s) to be executed if expression is true
fi
if [ expression ]
then
Statement(s) to be executed if expression is true
else
Statement(s) to be executed if expression is not true
fi
if [ expression 1 ]
then
Statement(s) to be executed if expression 1 is true
elif [ expression 2 ]
then
Statement(s) to be executed if expression 2 is true
elif [ expression 3 ]
then
Statement(s) to be executed if expression 3 is true
else
Statement(s) to be executed if no expression is true
fi
for
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
while
while command
do
Statement(s) to be executed if command is true
done
跳出循环
break 和 continue,和c语言中的用法一样
函数
定义函数
有两种定义方式,如下:
function_name () {
list of commands
[ return value ]
}
function function_name () {
list of commands
[ return value ]
}
调用函数
只写函数名字就可以,不用写括号。
参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…
文件包含
. filename (点和名字之间有空格)
或者
source filename
技巧
执行命令以前先打印命令,只需在文件开头添加set -x即可
ref
http://c.biancheng.net/cpp/shell/
Shell入门的更多相关文章
- Linux shell入门基础(六)
六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...
- Linux shell入门基础(一)
Linux shell入门基础(一): 01.增加删除用户: #useradd byf userdel byf(主目录未删除) userdel -r byf 该用户的属性:usermod 用 ...
- Shell - 简明Shell入门
本文以示例和注释的方式,对Shell编程的基本知识点进行了总结和回顾,所有脚本均已做了基本的调试和验证. Shell - 简明Shell入门 01 - 第一个脚本 脚本的定义.执行方法以及echo命令 ...
- linux shell 入门
本文是本人学习linux shell入门收集整理,不完全原创. 参考博文: http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html ...
- shell 入门学习
目录 shell 入门学习 注释 执行与启动 变量 语法 调试 title: shell 入门学习 date: 2019/7/16 15:47:49 toc: true --- shell 入门学习 ...
- Shell入门02
Shell入门-02 1.重定向 标准输入(<) 标准输出 标准错误重回定向 程序 = 指令 + 数据 命令 变量 在程序中,数据如何输入?又如何输出? 数据输入:键盘 – 标准输入,但是并 ...
- Shell入门01
Shell入门 1.基于硬件的虚拟化 2.基于平台的虚拟化 3.基于服务的虚拟化 4.基于库的虚拟化 5.基于操作系统的虚拟化 管理员使用Shell程序与操作系统进行交互,之前学习的shell脚本都是 ...
- 自学linux——11.shell入门
shell 基础 1.shell介绍(内置脚本) 程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理) 语法简单,代码写起来比较轻松,简单易学 (1)什么是shell shell ...
- 10_Linux基础-SHELL入门1
@ 目录 10_Linux基础-SHELL入门1 一. 输入输出重定向 二. 2个特殊文件 三. here document 四. tee命令 五. 清空文件内容 六. SHELL入门 SHELL的变 ...
随机推荐
- Vector Tile
Mapbox Vector Tile Specification A specification for encoding tiled vector data. <?XML:NAMESPACE ...
- T-SQL 查询数据库中各个表的使用空间
1. 查询单表 EXEC sp_spaceused 'dbo.tablename' 2. 查询所有表 SELECT t.NAME AS TableName, s.Name AS SchemaName, ...
- 0036 Java学习笔记-多线程-创建线程的三种方式
创建线程 创建线程的三种方式: 继承java.lang.Thread 实现java.lang.Runnable接口 实现java.util.concurrent.Callable接口 所有的线程对象都 ...
- FTP概述
FTP是什么? 早期三大网络应用之一:ftp(40年).http.mail ftp file transfer protocol 文件传输协议 FTP服务概述 C/S模型 客户端-服务器 FTP采用双 ...
- 在使用EF时调用DBFUNCTION扩展方法时,发生ENTITYCOMMANDEXECUTIONEXCEPTION 异常的解决办法
System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the comm ...
- linux top命令结果参数详解
非常详细的top结果说明文档. http://www.cnblogs.com/sbaicl/articles/2752068.html http://bbs.linuxtone.org/forum.p ...
- Nginx+PHP On windows
前期准备 Nginx 下载 http://nginx.org/ PHP下载 PHP Windows binaries 问题 问题1: opened a DOS window to la ...
- 使用jekins自动构建部署java maven项目(jdk1.7+tomcat7.0+jenkins2.19.3)
1.下载jenkins 地址:https://jenkins.io/index.html 本人下载了2.19.3版本的war包:jenkins.war 2.安装jenkins 拷贝jenkins.wa ...
- fixed数据类型
在处理图形运算,特别是3D图形生成运算时,往往要定义一个Fixed数据类型,我称它为定点数,定点数其时就是一个整形数据类型,他的作用就是把所有数 进行转换,从而得到相应类型的整型表达,然后使用定点数进 ...
- BFC和haslayout
待补充 参考链接:http://www.cnblogs.com/lhb25/p/inside-block-formatting-ontext.html 标准浏览器: BFC(block formatt ...