菜鸟教程之学习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笔记(上)的更多相关文章

  1. 菜鸟教程之学习Shell script笔记(下)

    菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  2. 菜鸟教程之学习Shell script笔记(中)

    菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  3. bash shell学习-shell script基础 (笔记)

    A chain no stronger than its weakest link. "一着不慎,满盘皆输" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux ...

  4. 菜鸟的《Linux程序设计》学习—shell script

    1. 认识shell script shell script是利用shell的功能缩写的一个"程序",这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面, ...

  5. bash shell学习-shell基础 (笔记)

    When you hoist the sails to cross the sea, you willride the wind and cleave the waves. "长风破浪会有时 ...

  6. 第13章 学习shell script

    由于博客园中dollar符号有别的意义,所以文中的dollar符号使用¥表示 第一个script [root@localhost script]# cat -n sh01.sh #!/bin/bash ...

  7. 学习shell script

    摘要:概述.script的编写.test命令.[]判断符号.默认变量($1...).if...then条件判断式. 一.概述 [什么是shell script] 针对shell所写的脚本,将多个命令汇 ...

  8. 学习shell脚本笔记

    1.if 是单分支语句,使用格式如下: if condition ; then statement ….. fi 2.if … else 是双分支语句,使用格式如下: if condition ; t ...

  9. 鸟哥的Linux私房菜之学习shell script

    运行程序的时候一般都是创建一个子程序来执行,所以子程序中的变量什么的在当前的shell下没法使用,但是如果使用source来执行就可以在当前shell下执行程序 shift 1 去掉第一个参数,后面接 ...

随机推荐

  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 ...

  2. python 使用pip安装使用国内镜像加速下载安装包的方法

    清华大学提供开源镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ pypi 镜像每 5 分钟同步一次. pip install 包的名字 == 版 ...

  3. java基本数据类型和运算符

    一.基本数据类型 种类: 内置数据类型 引用数据类型 1.内置数据类型 一共有八种基本类型,六个数字类型(四个整数类型,两个浮点型),一个布尔型,一个字符类型. (1)byte: byte数据类型是8 ...

  4. 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 ...

  5. docker nginx letsencrypt

    https越来越流行了,但免费的证书一般是一年有效期.一般是够用了,但懒人都想一劳永逸, 有个免费证书颁发机构是letsencrypt.它是开源,并且完全免费的,它颁发的证书已经被几乎所有的浏览器所认 ...

  6. oracle sql developer 创建数据库链接

    sql developer中 创建 dblink,创建时,用户名 和密码都不需要加引号 create database link ykt_dblink2connect to account ident ...

  7. 【java】之位运算^,&,<<,>>,<<<,>>>总结

    1.^(亦或运算) ,针对二进制,相同的为0,不同的为1 public static void main(String[] args) { System.out.println("2^3运算 ...

  8. 在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 ...

  9. python作业(二)实现注册功能和登陆功能

    #1.实现注册功能 输入:username.passowrd,cpassowrd #最多可以输错3次 #3个都不能为空 #用户名长度最少6位, 最长20位,用户名不能重复 #密码长度最少8位,最长15 ...

  10. ssh 端口转发实践

    A: 172.28.92.114 本地主机B: 172.28.92.117 中间主机C: 172.28.92.118 目的主机 (这里名字叫目的主机更合适,原先把这里叫成远程主机,导致我一直认为远程端 ...