菜鸟教程之学习Shell script笔记(上)
菜鸟教程之学习Shell script笔记
以下内容是,学习菜鸟shell教程整理的笔记
菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.html
Shell简介
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Shell脚本(shell script),是一种shell编写的脚本程序。
业界所说的shell通常是指shell脚本,但是shell和shell script是两个不同的概念。shell包括shell script和开发shell本身。一般实际生产操作过程中用的是shell编程,编写特定功能的shell script用来解决实际问题。
Shell环境
Bash:Bourne Again Shell (free and simple to use)
Bash是大多数Linux使用的system默认shell
一般情况下并不区分Bourne Shell 和 Bourne Again Shell,所以像#!/bin/sh 可以改为#!/bin/bash,#! 告诉系统其后路径指定的程序即是解释此脚本文件的shell程序。
Shell命令
- $ echo "hello world" #输出命令
- 运行shell脚本的两种方法:
./test.sh
/bin/sh test.sh or /bin/php test.php #直接以解释器运行,就不需要在第一行指定解释器信息。
Shell变量
- 和C语言的命名规则差不多,需要注意的是,不能使用标点符号,不能使用bash里的关键字(可用help命令查看保留的关键字)
- 定义使用变量
your_name="xxx"
echo $your_name
echo ${your_name} #变量名后面的花括号用来明确变量的边界 - 只读变量
使用readonly命令可以将变量变为只读变量
readonly xxx - 删除变量
unset xxx #unset 命令不能删除只读变量
Shell字符串
字符串可用用单引号,也可用双引号,亦可以不用引号
- str='this is a string'
your_name='runoob'
双引号里面可以有变量,可以出现转义字符 - 拼接字符串:
your_name="shell"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello,${your_name} !"
echo $greeting $greeting_1
# 使用单引号拼接
greeting_2='hello, '$your_name' !'
greeting_3='hello, ${your_name} !'
echo $greeting_2 $greeting_3
- 输出结果
hello, shell ! hello, shell !
hello, shell ! hello, ${your_name} !
- 获取字符串长度
string="abcd"
echo ${#string} #在字符串前面加#就可以实现
- 提取子字符串
从第2个字符开始截取4个字符
string="shell is great"
echo ${string:1:4} #输出 hell
- 查找子字符串
用 expr index 实现
查找字符i或a的位置(哪个字母先出现就计算哪个)
string="shell is great"
echo `expr index "$string" io` # 输出 7 (空格也算字符)
Shell数组
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
- 定义数组
数组名={value0 value1 valuue2....} or array_name=(
value0
value1
value2
value3
) #也可以单独定义:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
- 读取数组
一般格式:${数组名[下标]}
vuluen=${array_name[n]}
使用@符号可以读取数组中所有的元素
echo ${array_name[@]}
- 获取数组的长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
length=${#array_name[n]}
- Shell注释
用#号实现单行注释
用:<<EOF .... EOF 实现多行注释,EOF 可以换成其它字母 如‘ or !
Shell传递参数
#!/bin/bash
echo "Shell 传递参数实例!"
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
eg:./test.sh 1 2 3
只会传递存在的参数个数,如果输入的是./test.sh 1 2 3 4 则4不会被输出
$# $* $@ 的作用及区别
#!/bin/bash
echo "Shell传递参数实例!";
echo "第一个参数为:$1";
echo "参数个数为:$#";
echo "传递的参数作为一个字符串显示:$*";
echo "-- \$* 演示 --";
for i in "$*"; do
echo $i
done
echo "-- \$@ 演示 --";
for i in "$@"; do
echo $i
done
执行脚本,输出结果如下所示:
Shell 传递的参数实例!
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
参数个数是:3
传递的参数作为一个字符串显示:1 2 3
--$* 演示 --
1 2 3
-- $@ 演示 --
1
2
3
$*与$@区别:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,,则 " * " 等价于 "1 2 3"(传递了一个参数),而 "@" 等价于 "1" "2" "3"(传递了三个参数)
- $$ :脚本运行的当前进程ID号
- $- :显示Shell使用的当前选项,与set命令功能相同
- $? :显示最后命令退出的状态 0表示没有错误 其他任何值表明有错误
- Linux set命令用于设置shell set指令能设置所使用shell的执行方式,可依照不同的需求来做设置。语法:set [+-abCdefhHklmnpPtuvx] -a 标示已修改的变量,以供输出至环境变量。
-b 使被中止的后台程序立刻回报执行状态。
-C 转向所产生的文件无法覆盖已存在的文件。
-d Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e 若指令传回值不等于0,则立即退出shell。
-f 取消使用通配符。
-h 自动记录函数的所在位置。
-H Shell 可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k 指令所给的参数都会被视为此指令的环境变量。
-l 记录for循环的变量名称。
-m 使用监视模式。
-n 只读取指令,而不实际执行。
-p 启动优先顺序模式。
-P 启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t 执行完随后的指令,即退出shell。
-u 当执行时使用到未定义过的变量,则显示错误信息。
-v 显示shell所读取的输入值。
-x 执行指令后,会先显示该指令及所下的参数。
+<参数> 取消某个set曾启动的参数。 - 也可以在配置文件里修该Linux shell set
全局配置文件(都在/etc/目录下,etc为environment config缩写):
/etc/profile(不推荐修改)——每个用户在登录时都会调用
/etc/bashrc(推荐在此处设置全局环境变量,只对bash有效)——每个用户在bash打开时都会调用
/etc/paths(推荐在此处配置全局环境变量)——写法为一行一个路径,其他配置文件中可通过如下形式追加PATH:【export PATH=$PATH:[path1]:[path2]:[path3]……:[pathN] 】
用户配置文件:(都在~/家目录下)
~/.bash_profile(推荐在此处配置用户环境变量,只对bash有效)——当前用户登录时调用
~/.bashrc(推荐在此处配置用户环境变量,只对bash有效)——当前用户bash打开时调用
Shell数组
- 数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似)。
与大部分编程语言类似,数组元素的下标由0开始。
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:
array_name=(value1 value2)
- 使用下标定义数组
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2
- 读取数组
${array_name[index]}
- 使用@ or *可以获取数组中的所有元素
#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组的元素为:${my_array[*]}"
echo "数组的元素为:${my_array[@]}"
- 获取数组的长度
用${#xxx[* or @]}获取数组的长度
eg:
#!/bin/bash
my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=D
echo "数组元素个数为:${#my_array[*]}"
echo "数组元素个数为:${#my_array[@]}"
$ ./test.sh
数组元素个数为:4
数组元素个数为:4
菜鸟教程之学习Shell script笔记(上)的更多相关文章
- 菜鸟教程之学习Shell script笔记(下)
菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...
- 菜鸟教程之学习Shell script笔记(中)
菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...
- bash shell学习-shell script基础 (笔记)
A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) Linux ...
- 菜鸟的《Linux程序设计》学习—shell script
1. 认识shell script shell script是利用shell的功能缩写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面, ...
- bash shell学习-shell基础 (笔记)
When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...
- 第13章 学习shell script
由于博客园中dollar符号有别的意义,所以文中的dollar符号使用¥表示 第一个script [root@localhost script]# cat -n sh01.sh #!/bin/bash ...
- 学习shell script
摘要:概述.script的编写.test命令.[]判断符号.默认变量($1...).if...then条件判断式. 一.概述 [什么是shell script] 针对shell所写的脚本,将多个命令汇 ...
- 学习shell脚本笔记
1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...
- 鸟哥的Linux私房菜之学习shell script
运行程序的时候一般都是创建一个子程序来执行,所以子程序中的变量什么的在当前的shell下没法使用,但是如果使用source来执行就可以在当前shell下执行程序 shift 1 去掉第一个参数,后面接 ...
随机推荐
- 解决: Homestead 环境下, yarn install --no-bin-links, NPM run dev, 命令报错
执行以下命令: 1 $ rm -rf node_modules 2 $ yarn config set registry http://registry.cnpmjs.org 3 $ yarn ins ...
- python 使用pip安装使用国内镜像加速下载安装包的方法
清华大学提供开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ pypi 镜像每 5 分钟同步一次. pip install 包的名字 == 版 ...
- java基本数据类型和运算符
一.基本数据类型 种类: 内置数据类型 引用数据类型 1.内置数据类型 一共有八种基本类型,六个数字类型(四个整数类型,两个浮点型),一个布尔型,一个字符类型. (1)byte: byte数据类型是8 ...
- How to run Python code from Sublime
How to run Python Code from Sublime,and How to run Python Code with input from sublime Using Sublime ...
- docker nginx letsencrypt
https越来越流行了,但免费的证书一般是一年有效期.一般是够用了,但懒人都想一劳永逸, 有个免费证书颁发机构是letsencrypt.它是开源,并且完全免费的,它颁发的证书已经被几乎所有的浏览器所认 ...
- oracle sql developer 创建数据库链接
sql developer中 创建 dblink,创建时,用户名 和密码都不需要加引号 create database link ykt_dblink2connect to account ident ...
- 【java】之位运算^,&,<<,>>,<<<,>>>总结
1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算 ...
- 在ubuntu下装python3.6
Ubuntu 14.04 and 16.04 If you are using Ubuntu 14.04 or 16.04, you can use J Fernyhough's PPA at htt ...
- python作业(二)实现注册功能和登陆功能
#1.实现注册功能 输入:username.passowrd,cpassowrd #最多可以输错3次 #3个都不能为空 #用户名长度最少6位, 最长20位,用户名不能重复 #密码长度最少8位,最长15 ...
- ssh 端口转发实践
A: 172.28.92.114 本地主机B: 172.28.92.117 中间主机C: 172.28.92.118 目的主机 (这里名字叫目的主机更合适,原先把这里叫成远程主机,导致我一直认为远程端 ...