Shell 脚本编程入门基础
来源:互联网 发布:c语言的头文件是什么 编辑:程序博客网 时间:2024/06/05 15:45
概念
shell脚本语言就是一门简单的高级语言,它的文件名是以.sh结尾的
环境
Linux或者Ubuntu都默认安装了shell解释器
脚本解释器
- sh:即Bourne shell,POSIX(Portable Operating System Interface)标准的shell解释器,它的二进制文件路径通常是/bin/sh,由Bell Labs开发。本文讲的是sh,如果你使用其它语言用作shell编程,请自行参考相应语言的文档
- bash:Bash是Bourne shell的替代品,属于GNU Project,二进制文件路径通常是/bin/bash。业界通常混用bash sh 和shell
第一个shell脚本
编写
打开文本编辑器,新建一个文件,扩展名为sh,输入一些代码,第一行一般是这样:
#!/bin/bash#!/usr/bin/php
‘#!’是一个约定的标记,它告诉系统这个脚本需要用什么解释器来执行
运行
运行shell脚本有两种方法:
- 作为可执行程序
chmod +x test.sh./test.sh
注意,一定要写成./test.sh,而不是test.sh,运行其他二进制程序也是一样,直接写test.sh,linux系统回去PATH里寻找有木有叫test.sh的,而只有/bin, /sbin 等在path里,你当前路径通常不在path里,所以写成test.sh是会找不到的,要用./test.sh告诉系统就在当前目录下找。
2.作为解释器参数
这种方式是直接运行解释器,其参数就是shell脚本的文件名,如:
/bin/sh test.sh/bin/php test.php
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。
变量
定义变量
定义变量时,变量名不加$符号,变量名和等号之间不能有空格。
My_name='xiaoyi'
使用变量
使用一个定义好的变量,只要在变量名前面加$符号就行了
My_name="xiaoyi"echo $My_name
变量名外的花括号可加可不加,加花括号是为了帮助解释器识别变量的边界,为了规范,一般希望大家加
My_name='xiaoyi'echo ${My_name}
重定义变量
对于已经定义过的变量,可以被重新定义,如:
My_name='xiaoyi'echo ${My_name}My_name='meizhen'echo ${My_name}
注释
sh中用#进行注释,sh中没有多行注释,只能每行加一个#号
如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?每一行加个#符号太费力了,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。
字符串
- 单引号:
str='hello,xiaoyi'
注意:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效,单引号字符串中不能出现单引号。
- 双引号:
My_name='xiaoyi'str="hello ${My_name}"注意,双引号中可以有变量,双引号里可以有转义字符
字符串操作
获取字符串长度
My_name="xiaoyi"echo ${#My_name} #输出6
查找子字符串
string="xiaoyi is cool"echo `expr index "$string" is` #这个话的意思是找出is在这个string中的位置
条件判断
if
if conditionthen conmand1 conmand2 conmand3 ... conmandNfi
写成一行(适用于终端命令提示符):
if `ps -ef | grep ssh`; then echo hello;fi
注意:末尾的fi就是if倒过来写的,以后还会遇到类似的
is else
if conditionthen command1 command2 ... commandNelse commandfi
循环语句
for
for var in item1 item2 ... itemNdo command1 command2 command3 ... commandNdone
写成一行:
for var in item1 item2 ... itemN;do command;command2... done;
while
while conditiondo commanddone
until
until conditiondo commanddone
选择语句
case
case "${opt}" in "A") command1 ;; "B") command2 ;; * ) echo "Bad option, please choose again"esas
case语法和C语言差别很大,它需要一个esac作为结束标记,每个case分钟用右圆括号,用两个分号表示break.
参考资料
https://github.com/qinjx/30min_guides/blob/master/shell.md
Advanced Bash-Scripting Guide,非常详细,非常易读,大量example,既可以当入门教材,也可以当做工具书查阅
Unix Shell Programming
Linux Shell Scripting Tutorial - A Beginner’s handbook
- Shell 脚本编程入门基础
- shell脚本编程入门
- Shell脚本编程基础
- Shell脚本编程基础
- Shell脚本编程基础
- shell脚本编程基础
- shell编程基础 脚本
- Shell脚本编程基础
- Shell脚本编程基础
- shell脚本编程基础
- Shell脚本编程基础
- shell脚本编程基础
- shell脚本编程基础
- SHELL脚本编程基础
- shell脚本的基础入门
- shell 脚本入门--基础1
- Linux Shell编程--入门脚本
- 《Linux shell脚本编程入门》
- scrapy的安装和创建
- STM32 TIMER初始化步骤
- Oracle中1个行转列例子
- 分析关于close_wait过多对系统造成的影响
- 认识GPL/LGPL
- Shell 脚本编程入门基础
- PAT (Basic Level) Practise (中文)1002.写出这个数
- 函数实例之数组应用(初始化,逆置,输出,清空)
- 在VS中添加lib库的三种方法
- python笔记1
- Python中的Lambda函数关键词的用法
- String操作
- 行转多列lateral view explode详解
- servlet中请求转发(forword)与重定向(sendredirect)的区别