Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

Shell 环境

Linux 的 Shell 种类众多,常见的有:
Bourne Shell(/usr/bin/sh或/bin/sh)
Bourne Again Shell(/bin/bash)
C Shell(/usr/bin/csh)
K Shell(/usr/bin/ksh)
Shell for Root(/sbin/sh)
……
在一般情况下,人们并不区分 Bourne Shell 和 Bourne Again Shell,所以,像 #!/bin/sh,它同样也可以改为#!/bin/bash。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

第一个 Shell 脚本

打开文本编辑器(可以使用 vi/vim 命令来创建文件),新建一个文件 b.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行。

输入一些代码,第一行一般是下图

"#!" 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。

如遇到下列错误原因为权限不够。使用chmod命令为root使脚本具有执行权限

[root@192 myshell]# ./b.sh
-bash: ./b.sh: Permission denied
[root@192 myshell]# chmod 744 b.sh
chmod +x ./b.sh  #使脚本具有执行权限
./b.sh  #执行脚本

注意,一定要写成 ./b.sh ,而不是b.sh,要用 ./test.sh 告诉系统说,就在当前目录找。

[root@192 myshell]# ./b.sh
Hello World !

Shell变量

Shell 变量

定义变量时,变量名不加美元符号($,PHP语言中变量需要)
注意,变量名和等号之间不能有空格。

首个字符必须为字母(a-z,A-Z)。
中间不能有空格,可以使用下划线(_)。
不能使用标点符号。
不能使用bash里的关键字(可用help命令查看保留关键字)

使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可

your_name="wangyy"
echo $your_name
echo ${your_name}


变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。
比如:

for skill in Ada Coffe Action Java doecho "I am good at ${skill}Script"
done

如果不给skill变量加花括号,写成echo “I am good at $skillScript”,解释器就会把 $skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。

your_name="tom"
echo $your_name
your_name="alibaba"
echo $your_name

这样写是合法的,但注意,第二次赋值的时候不能写 $your_name=“alibaba”,使用变量的时候才加美元符( $)。

Shell 字符串

单引号

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符
    拼接字符串
your_name="wangyy"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1

输出

获取字符串长度

echo ${#greeting}


提取子字符串

`echo ${greeting:0:5}   输出hello


查找子字符串

echo `expr index "$greeting" name`

Shell 数组

在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。定义数组的一般形式为:

数组名=(值1 值2 ... 值n)

例如:

array_name=(value0 value1 value2 value3)
或
array_name=(
value0
value1
value2
value3
)
还可以单独定义数组的各个分量:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen

可以不使用连续的下标,而且下标的范围没有限制。

读取数组

读取数组元素值的一般格式是:

${数组名[下标]}

例如:

valuen=${array_name[n]}
valuen=${array_name[@]}

@为所有数组 n为数组标识

shell注释

以"#"开头的行就是注释,会被解释器忽略。

sh里没有多行注释,只能每一行加一个#号
如:
如果遇到大段的代码需要临时注释起来,过一会儿又取消注释,可以把这一段要注释的代码用一对花括号括起来,定义成一个函数,没有地方调用这个函数,这块代码就不会执行,达到了和注释一样的效果。

Shell 传递参数

Shell 传递参数

我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数,以此类推……

以下实例我们向脚本传递三个参数,并分别输出,其中 $0 为执行的文件名:

#!/bin/bash
echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";

Shell 数组

Shell 数组

与大部分编程语言类似,数组元素的下标由0开始。
Shell 数组用括号来表示,元素用"空格"符号分割开,语法格式如下:

array_name=(value1 ... valuen)

实例:

my_array=(A B C D)
我们也可以使用下标来定义数组:
array_name[0]=value0
array_name[1]=value1
array_name[2]=value2

读取数组
读取数组元素值的一般格式是:

${array_name[index]}

实例:

my_array=(A B C D)
echo "第一个元素为: ${my_array[0]}"
echo "第二个元素为: ${my_array[1]}"
echo "第三个元素为: ${my_array[2]}"
echo "第四个元素为: ${my_array[3]}"


获取数组中的所有元素
使用@ 或 * 可以获取数组中的所有元素,例如:

my_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=Decho "数组的元素为: ${my_array[*]}"
echo "数组的元素为: ${my_array[@]}"

执行脚本,输出结果为:

获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同但是要在数组名前加入#,例如:

#!/bin/bashmy_array[0]=A
my_array[1]=B
my_array[2]=C
my_array[3]=Decho "数组元素个数为: ${#my_array[*]}"
echo "数组元素个数为: ${#my_array[@]}"

输出结果为:

隔壁小王的shell命令1相关推荐

  1. linux下如何用c语言调用shell命令-转

    C程序调用shell脚本共有三种法子 :system().popen().exec系列函数 system()不用你自己去产生进程,它已经封装了,直接加入自己的命令exec 需要你自己 fork 进程, ...

  2. 故事:坐在我隔壁的小王问我什么是HyperLogLog

    1 最近坐我隔壁的小王同志,心情真是糟透了.不但工作不顺心,被老板狠狠的批了一顿,连女朋友也跟别人跑了(Y 的让你天天在我面前秀). 真是不可谓不惨,我都快要同情他了. 看着他萎靡又迷离的眼神,我实在 ...

  3. 到底是不是隔壁老王?责任链模式帮小头爸爸洗绿

    目的 在发送请求的类和最终处理的类之间进行解耦 例子代码 小伙伴们都看过 大头儿子小头爸爸 么(大手牵小手, 走路不怕滑~), 当初纯洁的我怎么也没想到小头爸爸的绿帽子这么鲜艳 [外链图片转存失败,源 ...

  4. awk小技巧之执行shell命令

    方法一:system函数 1 ip add | grep enp0s8 | grep inet | awk '{print $2}' | awk -F"/" '{printf $1 ...

  5. php执行cmd/shell命令 木马小后门

    php执行shell命令,可以使用下面几个函数: string system ( string $command [, int &$return_var ] )string exec ( st ...

  6. 《跟着小吴哥学python》之 11 Python执行shell命令

    语法 引用模块包: import os, commands 1. os.system('cat /proc/cpuinfo') 返回执行结果.0或者其它.0为正常,其余为非正常. 2. output ...

  7. 在昨天夜黑风高的晚上,我偷了隔壁老王的Python入门课件,由浅入深堪称完美!

    隔壁老王是一个资深码农,就业教育事业的秃顶之才 昨天我下楼打酱油,看他迎面走来,满目春光 我好奇的问道:老王,有什么好事,隔壁小花叫你上门了吗? 老王:秘密!! 我心想:哎呦~不错啊 半晚之时,连猫狗 ...

  8. bash shell命令(2)

    在上篇<bash shell命令(1)>中,介绍了几种简单的linux shell命令,今天继续介绍bash shell命令 本文地址:http://www.cnblogs.com/arc ...

  9. Linux中常见shell命令总结

    1.具体的shell命令用法可以通过help或man命令进入手册来查询其具体的用法. 2.终端本质上对应着linux上的/dev/tty设备,linux的多用户登录就是通过不同的/dev/tty设备完 ...

最新文章

  1. Http代理程序,基于hash缓存实现
  2. petalinux 安装 库 时的问题
  3. 图像降噪算法——时域降噪算法
  4. 程序员到底需要什么样的需求文档?
  5. 从URI中获取实际的文件path
  6. VTK:绘图之LinePlot
  7. 【剑指offer15.二进制中1的个数】——位操作(左移右移等)
  8. python 字符串比较忽略大小写的方法_python实现忽略大小写对字符串列表排序的方法...
  9. php点击链接代码,php 获取超链接中文本的代码
  10. IDEA 启动时,报“淇℃伅”的字符
  11. oracle表空间的创建、修改、删除及一些参数解释
  12. 普通web项目转maven项目
  13. 这8款浏览器兼容性测试工具,用了以后测试效率可以“起飞”~~
  14. sql server 创建数据库 语法
  15. MySQL filesort优化案例一则
  16. SEH in ASM研究
  17. 中医为什么会发明比血管更玄乎的经脉呢
  18. 配置 择时 sel stock
  19. 电商网上购物成为非洲人喜欢的一种新颖购物方式
  20. python画出K线图及技术指标

热门文章

  1. Microsoft 365 - Teams会议时如何开启美颜功能
  2. Oracle aes128和aes256加解密
  3. 利用kali hydra 暴力破解Windows7(hydra的基本用法)会继续更新
  4. angr源码分析——cle.Loader类
  5. 微信小程序-001-抽签功能-006-我的抽签-主界面
  6. WD --蓝盘绿盘黑盘红盘的区别
  7. 纺织erp有哪些,纺织企业为什么要上ERP
  8. 没有人会疼自己没人会懂,会理解:伤感空间日志
  9. Mac下如何将Safari书签导入Chrome
  10. matlab 中trace,trace命令和tracert命令的用途 matlab中的trace 怎么用的?