shell教程

Shell

Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。

Shell 脚本

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
#! 告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell 程序。

#!/bin/bash
echo "Hello World !"

运行shell脚本

作为可执行程序

chmod +x ./test.sh  #使脚本具有执行权限
./test.sh  #执行脚本,告诉系统说,就在当前目录找

作为解释器参数

/bin/sh test.sh
/bin/php test.php

Shell 变量

定义变量时,变量名不加美元符号,变量名和等号之间不能有空格

your_name="name"
使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界

your_name="qinjx"
echo $your_name
your_name="alibaba" # 第二次赋值不能使用$
echo ${your_name}

只读变量

readonly myUrl
删除变量
unset variable_name

变量被删除后不能再次使用,unset 命令不能删除只读变量。

变量类型

  1. 局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。
  2. 环境变量 所有的程序,包括shell启动的程序,都能访问环境变量,有些程序需要环境变量来保证其正常运行。必要的时候shell脚本也可以定义环境变量。
  3. shell变量 shell变量是由shell程序设置的特殊变量。shell变量中有一部分是环境变量,有一部分是局部变量,这些变量保证了shell的正常运行

Shell字符串

单引号
str='this is a string'

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号
your_name="runoob"
str="Hello, I know you are \"$your_name\"! \n"
echo -e $str

双引号里可以有变量
双引号里可以出现转义字符

获取字符串长度
string="abcd"
echo ${#string} #输出 4
提取子字符串
string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

Shell 数组

定义数组

只支持一维数组(不支持多维数组),初始化时不需要定义数组大小。
可以不使用连续的下标,而且下标的范围没有限制。
Shell 数组用括号来表示,元素用"空格"符号分割开。

数组名=(值1 值2 ... 值n)
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
读取数组
${数组名[下标]}
echo ${array_name[@]} # 使用 @ 符号可以获取数组中的所有元素
echo ${array_name[*]} # 使用 * 符号可以获取数组中的所有元素
获取数组的长度
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
# 取得数组单个元素的长度
lengthn=${#array_name[n]}

Shell 传递参数

脚本内获取参数的格式为:$n。n 代表一个数字,0 为执行的文件名(包含文件路径),1 为执行脚本的第一个参数,2 为执行脚本的第二个参数
还有几个特殊字符用来处理参数
$# 传递到脚本的参数个数
$* 以一个单字符串显示所有向脚本传递的参数。
$$ 脚本运行的当前进程ID号
$! 后台运行的最后一个进程的ID号
$@$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$- 显示Shell使用的当前选项,与set命令功能相同。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

Shell 基本运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

val=`expr 2 + 2`
echo "两数之和为 : $val"
`expr $a + $b` 
`expr $a - $b`
`expr $a \* $b` # 乘号(*)前边必须加反斜杠(\)才能实现乘法运算
`expr $b / $a`
`expr $b % $a`
a=$b
[ $a == $b ] # 条件表达式要放在方括号之间,并且要有空格
[ $a != $b ] # 条件表达式要放在方括号之间,并且要有空格

还包括关系运算符、布尔运算符、逻辑运算符

字符串运算符

-z 检测字符串长度是否为0,为0返回 true。

文件测试运算符

-d file 检测文件是否是目录,如果是,则返回 true。

Shell echo命令

read 命令从标准输入中读取一行,并把输入行的每个字段的值指定给 shell 变量。

echo -e "OK! \n" # -e 开启转义

Shell printf 命令

printf  format-string  [arguments...]

format-string: 为格式控制字符串
arguments: 为参数列表。

Shell test 命令

test 命令用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。

Shell 流程控制

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

Shell 函数

[ function ] funname [()]

{

    action;

    [return int;]

}

Shell 输入/输出重定向

command > file 将输出重定向到 file。
command < file 将输入重定向到 file。
command >> file 将输出以追加的方式重定向到 file。
n > file 将文件描述符为 n 的文件重定向到 file。
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m 将输出文件 m 和 n 合并。
n <& m 将输入文件 m 和 n 合并。
<< tag 将开始标记 tag 和结束标记 tag 之间的内容作为输入。

文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

Shell 文件包含

. filename   # 注意点号(.)和文件名中间有一空格source filename
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值