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的变 ...
随机推荐
- JavaScript 常用代码
未知对象 对象类型名称:xobject.constructor.name 对象成员键名:Object.keys(xobject) 枚举对象成员及其值:for(var propertyName in r ...
- 关于case语句中声明变量并初始化的注意事项
今天看到一句对这个问题特别精辟的总结,记录如下: It is possible to transfer into a block, but not in a way that bypasses dec ...
- 小tips合集
No. 1 同一个文本文件里的行结束符如果不一致,比如有些行结束符是0D0A-Windows风格的,而有些行又是UNIX风格的0A,在这种混杂情况下,VIM将非UNIX风格的显示为^M,但如果都是0D ...
- CentOS如何查看硬盘品牌型号等具体信息
首先使用smartctl --all /dev/sda 指令来检查硬盘信息,该指令CentOS自带,得到的结果可能如下: smartctl 5.43 2012-06-30 r3573 [x86_64- ...
- MySQL排序原理与案例分析
前言 排序是数据库中的一个基本功能,MySQL也不例外.用户通过Order by语句即能达到将指定的结果集排序的目的,其实不仅仅是Order by语句,Group by语句,Distinct ...
- mongodb之使用explain和hint性能分析和优化
当你第一眼看到explain和hint的时候,第一个反应就是mysql中所谓的这两个关键词,确实可以看出,这个就是在mysql中借鉴过来的,既然是借鉴 过来的,我想大家都知道这两个关键字的用处,话不多 ...
- mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理
mongodb一直都在不断的更新,不断的发展,那些非常好玩也非常实用的功能都逐步加入到了mongodb中,这不就有了本篇对ttlindex的介绍, 刚好我们的生产业务场景中就有这个一个案例... 一: ...
- Django模板的继承
一.extend 1.extend继承模板 2.一个文件中只能继承一个模板 3.extend继承模板中的所有内容,模板的内容包括:html的head和body ,eg:
- 将现有MySQL数据库改为大小写不敏感
用过MySQL的应该都会注意到,默认情况下,Linux下安装的MySQL是大小写敏感的,也就是说Table1和table1可以同时存在.而Windows下的MySQL却是大小写不敏感的,所有表名和数据 ...
- Yii2 脚本手动执行可以,计划任务执行不成功
用Yii2的console写了个脚本,在命令行执行都OK. 放到cron里面也按时去执行了,但就是执行的效果不对,console脚本执行结果不对. 查看之后的是由于yii脚本的php路径问题(跟目录下 ...