前言

日常用Python多一些,不过很多时候shell脚本更简单实用一些,所以有必要熟悉一下shell脚本。当然shell有他特定的一些场景,比方说我曾经改过一个vpn断线自动重连的脚本,简单实用。

另:本文比较简单,算是入门简述,类似于30分钟入门的东西,想详细看的可以去搜其他文章,很多~

注释

这个比较简单,和很多语言都一样,#后面的就是注释,代表本行是注释,执行的时候会被忽略,没有多行注释。

注:

  1. 如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
  2. vim里有更简单的操作 - -

变量

变量的定义

  1. 首个字符必须为字母(a-z,A-Z)。
  2. 中间不能有空格,可以使用下划线(_)。
  3. 不能使用标点符号。
  4. 不能使用bash里的关键字(可用help命令查看保留关键字)。
  5. 使用等号赋值,变量名和等号之间不能有空格

如:

name="wang"

使用变量

变量名前面加$即可,同时推荐给变量名加花括号(可选,部分场景下必选),例如(注意最后两行,如果不加花括号会导致系统认为firstNamewang是一个变量):

echo $name

read firstName

echo "firstName=$firstName"
echo "firstNmae=${firstName}" echo "name=$fistNamewang"
echo "name=${firstName}Wang"

其他操作

  1. 只读变量,变量前加readonly,如readonly name,此操作后不得再重新赋值
  2. 删除变量,unset name,此语句后不得再使用此变量
  3. 读取输入,见上面使用变量处read firstName,此处即为获取标准输入
  4. 一些转义字符,使用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命令

一般的使用没什么可说的,说几个特殊的:

  1. 显示结果重定向到文件,echo "xxx" > file_name
  2. 执行命令,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入门的更多相关文章

  1. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  2. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

  3. Shell - 简明Shell入门

    本文以示例和注释的方式,对Shell编程的基本知识点进行了总结和回顾,所有脚本均已做了基本的调试和验证. Shell - 简明Shell入门 01 - 第一个脚本 脚本的定义.执行方法以及echo命令 ...

  4. linux shell 入门

    本文是本人学习linux shell入门收集整理,不完全原创. 参考博文: http://www.cnblogs.com/suyang/archive/2008/05/18/1201990.html ...

  5. shell 入门学习

    目录 shell 入门学习 注释 执行与启动 变量 语法 调试 title: shell 入门学习 date: 2019/7/16 15:47:49 toc: true --- shell 入门学习 ...

  6. Shell入门02

    Shell入门-02 1.重定向 标准输入(<) 标准输出 标准错误重回定向 程序 = 指令 + 数据 命令   变量 在程序中,数据如何输入?又如何输出? 数据输入:键盘 – 标准输入,但是并 ...

  7. Shell入门01

    Shell入门 1.基于硬件的虚拟化 2.基于平台的虚拟化 3.基于服务的虚拟化 4.基于库的虚拟化 5.基于操作系统的虚拟化 管理员使用Shell程序与操作系统进行交互,之前学习的shell脚本都是 ...

  8. 自学linux——11.shell入门

    shell 基础 1.shell介绍(内置脚本) 程序开发的效率非常高,依赖于功能强大的命令可以迅速地完成开发任务(批处理) 语法简单,代码写起来比较轻松,简单易学 (1)什么是shell shell ...

  9. 10_Linux基础-SHELL入门1

    @ 目录 10_Linux基础-SHELL入门1 一. 输入输出重定向 二. 2个特殊文件 三. here document 四. tee命令 五. 清空文件内容 六. SHELL入门 SHELL的变 ...

随机推荐

  1. arcgis api for js入门开发系列三地图工具栏(含源代码)

    上一篇实现了demo的地图加载展示,在上篇实现的基础上,新增了地图工具栏以及通用地图控件功能,比如地图框选缩放.地图漫游.清空.量算工具.地图导航控件.地图比例尺控件.地图鹰眼图等等,总共分为5个部分 ...

  2. 两listview联动

    package com.mttz; import java.util.ArrayList;import java.util.List; import com.mttz.adapter.CaiDanAD ...

  3. apache-shiro入门<一>

    Apache Shiro是一个强大而灵活的开源安全框架(本来想传到网盘供大家下载,但是鉴于国内网盘动不动就要关闭清楚用户数据:所以我提供了另一个shiro的中文文档下载链接:http://downlo ...

  4. 使用Nexus搭建Maven本地仓库

    阅读目录 序 Nexus 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 在工作中可能存在有 ...

  5. CentOS yum 源的配置与使用

    一.yum 简介 yum,是Yellow dog Updater, Modified 的简称,是杜克大学为了提高RPM 软件包安装性而开发的一种软件包管理器.起初是由yellow dog 这一发行版的 ...

  6. Windows 10下使用U盘安装Ubuntu双系统

    问题描述:在Windows10下安装Ubuntu. 使用工具:Windows10.Ubuntu16.04 LTS安装包.UltraISO.easyBCD. 操作步骤: 1.安装之前要给Ubuntu分出 ...

  7. 3-linux下部署tomcat应用

    linux下部署tomcat应用 相关软件下载 jdk      http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downlo ...

  8. JVM原理和优化

    JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...

  9. [No0000AB]用Visual Studio 2015在 WIN10 64bit 上编译7-zip (32 bit)

    1.7-ZIP简介 7-zip 是一款免费的压缩解压软件.ZIP格式的文件默认被苹果和微软支持,完全不需要额外安装其他软件就可以解压.但对于非US-ASCII编码的文件名和大于2GB的ZIP文件,可能 ...

  10. struts-tags通用标签基本用法

    2017-01-07 16:02:46 <s:debug></s:debug><!-- 标签库中实现的debug --> ${name }<!-- 是从对象栈 ...