Shell参考

菜鸟教程–Shell教程

运行 Shell 脚本有两种方法

作为可执行程序
代码保存为 test.sh,并 cd 到相应目录:
chmod +x ./test.sh #使脚本具有执行权限
./test.sh #执行脚本
作为解释器参数
直接运行解释器,其参数就是 shell 脚本的文件名:
/bin/sh test.sh
/bin/php test.php
Shell 注释
以"#"开头的行就是注释,会被解释器忽略。
sh里没有多行注释,只能每一行加一个#号。

Shell 变量

变量命名赋值
命名规则与java一致。
变量名、等号、值之间不能有空格。其他命令间,均用空格隔开。
a=1;
使用变量
在变量名前面加$,使用定义过的变量。

name=yun
echo $name   #输出yun
echo ${name}   #推荐加{},帮助解释器识别变量边界
name=lin; #再次给变量赋值,不需使用$符号。

只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
a=1;
readonly a; #只读
a=2; #报错
删除变量
使用 unset 命令可以删除变量。语法:
unset a #删除变量
变量被删除后不能再次使用。unset 命令不能删除只读变量。
变量类型
运行shell时,会同时存在三种变量:

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

Shell 字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。
单引号
str=‘this is a string’
单引号字符串的限制:
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单引号(对单引号使用转义符后也不行)。
双引号

your_name='qinjx'
str="Hello, I know your are \"$your_name\"! \n"

双引号的优点:
双引号里可以有变量
双引号里可以出现转义字符
拼接字符串
直接拼接,无操作符。

your_name="qinjx"
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo say$greeting $greeting_1

获取字符串长度
操作符#,${#varName}

string="abcd"
echo ${#string} #输出 4

提取子字符串
操作符:,格式:${var:start[:end]};索引从1开始,不含头只含尾。

string="runoob is a great site"
echo ${string:1:4} # 输出 unoo

查找子字符串

格式:`expr index “${var}” substr`
string="runoob is a great company"
echo `expr index "$string" is`  # 输出 8

注意: 以上脚本中 “`” 是反引号,而不是单引号 “’”。
也可:expr index $var $substr

Shell 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
类似与C语言,数组元素的下标由0开始编号。获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。
定义数组
在Shell中,用括号来表示数组,数组元素用"空格"符号分割开。格式:

arr=(val1 val2...)
arr=(1 2 3 4)
arr1[0]=1; arr1[2]=2;

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

${数组名[下标]}
valuen=${arr[0]}  #1,大括号括起,帮助区分边界
echo ${arr[@]}  #1 2 3 4 下标为@、*符号时,获取数组中的所有元素

获取数组的长度

${#数组名[@/\*]}   #获取数组长度
${#数组名[index]}   #获取数组单个元素长度
echo ${#arr[@]}   #4
echo ${#arr[1]}    #1

Shell 基本运算符

算数运算符:+,-,\*(需转义),/,%,===,!=
	格式:`expr 2 + 2`;expr命令,反引号,表达式和运算符之间必须有空格。
	其他形式:$(expr 2 + 2)
		$((2 + 2))(())为整数运算符
关系运算符:-eq,-ne,-gt,-lt,-ge,-le
	格式:[10 -eq 20],中括号括起,空格。只支持数值。
布尔运算符:!-o()-a()
	格式:[ 10 -eq 20 -o 1 eq 1],一个中括号,空格
逻辑运算符:||&&
	格式:[[ 10 -eq 20 || 1 eq 1]],两个中括号,空格
字符串运算符:=!=-z(长度为0)-n(长度不为0),str([$str],不为空返回true)
	格式:[‘aa’ = ‘bb’],[-z $str],,中括号括起,空格
文件测试运算符:
	-d/f,目录/文件
	-r/w,可读/可写
	-x,可执行;-e,存在;-s,非空。
使用$()、$(())、$[]进行数值运算。
可使用[ ]判断结构的地方都可以使用[[ ]];故推荐使用[[ ]]。
对true、false运算时,不加[[ ]][ ]。
条件判断结构无法赋值给变量,只能用于if结构。

命令

export命令

格式:export [-fpn][name]=[value];设置/显示环境变量
f,表示name为函数名
p,列出所有环境变量
n,删除变量;实际未删除,只是禁用。

export -f # 列出当前的环境变量值
export JAVA_HOME='/java' # 声明并设置环境变量

help命令

格式:help command;显示帮助

echo命令

格式:echo string

双引号,可引用变量;单引号原样输出。
-e,开启双引号字符串转义。
echo `date`;反引号,显示命令执行结果
echo lalala > 1.txt;标准输出到指定文件。

printf命令

格式:printf “format” str;格式化输出
%s、%c、%d、%f;字符串、字符、十进制整数、浮点数占位符
%-10s,宽度10,-左对齐(无为右对齐)
%-4.2f,.2保留两位小数。

test命令

检查条件是否成立,作用类似[[ ]]。
test ex,[[ ex ]]

Shell流程控制

分支

if
if-then-fi
if-then-else-fi
if-then-elif then-else-fi
else不可为空,如为空则省略else。
case

case 1 in 
	1) echo 1; ;;
	2) echo 2; ;;
	*) echo *; ;; 
esac; #双分号结束分之前必须有空格

循环

for
for var in v1 v2…vn; do command; done
for((i=1;i<5;i++)); do command; done
while

while exp; do command; done;
	i=0;
	while (($i<3)); do echo $i; let "i++"; done;
util  exp; do command; done;
	until [ $i -gt 3 ]; do echo $i; i = `expr $i + 1`; done;

死循环及跳出
while :/true、for (( ; ; ));无限循环
break、continue

Shell函数

格式:[function] fName(){ command; [return int;] }
return 语句返回函数执行结果,正常0,异常1-255。必须为0-255。
function、return语句可省,省去return后返回值为最后一行命令的结果。
函数中可通过变量名,直接引用外部变量。

$n,获取第n个参数;n>10,使用${10}格式。
$*$@,显示所有参数
$#,传递到函数的参数个数
$?,函数外使用,显示最后命令的退出状态。
for i in $*;遍历所有输入参数。

Shell输入输出重定向

格式:command [n] >/>> file
0标准输入,1标准输出,2错误输出。

>/>>,重定向输出/追加重定向输出
<,重定向输入;<<tag,将开始标记tag和结束标记tag间的内容作为输入。
m > &n,将输出文件m和n合并;date 1>file1 2> &1
m < &n,将输入文件m和n合并
command >/dev/null 2> &1   不在屏幕上显示,/dev/null

Shell文件包含

格式:./source file,引入外部脚本。引入后可使用其中的变量。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值