通过代码和注释的形式,列举了shell的基础操作,快速入门。shell在线编辑器
注释
单行用#
号;多行::<<' 多行注释... '
、:<<a 多行注释... a
、:<<xx 多行注释... xx
...。#!
用来指定shell程序的路径。
#!/bin/bash
# 我是注释
:<<'
...多行注释...
'
变量
echo用来打印输出。
num=12345555 #定义。中间不能有空格。
echo ${num} #使用。echo用来输出num。
echo $num #简写方式。
read num #从标准输入给变量赋值
readonly num #使变量只读,不可改变也不可删除。
upset num #删除。如果删除只读变量,运行时会出错。
:<<'
字符串变量
'
s='BA' #单引号包含。单引号中内容时固定的,加在里面的变量无效,写的啥就是啥。
st='up,up,down,down,left,right,left,right,'${s} #可以在单引号外面加变量实现拼接。
str="${st},awsl" #双引号包含,中间可以加变量来拼接。str=上,上,下,下,左,右,左,右,BA,awsl。
echo ${#str} #中间加个#号获取字符串长度。此命令输出45。
echo abcd"efg"\" #输出:abcdefg"。
echo abcd"efg #正确的错误示范,会报错。非转义的双引号当作字符串变量标识,且必须成对出现,不会显示。
echo 'one${peace}"' #输出one${peace}"。单引号内容固定。单引号必须成对出现,转义的也不能单出来。
文件包含
. pwdfile #中间有个空格。在一个脚本里包含另一个脚本,pwdfile是文件路径,可以是字符喜欢变量。
source pwdfile #同上。
向脚本传参数
在终端这样运行脚本:~/position.sh x y
,x、y是两个参数,在脚本中可以获取参数信息。
# ~/position.sh x y
echo $0 #输出 position.sh 文件名,看作第0个参数。
echo $1 #输出 x ,第1个参数。
echo $# #输出 2 ,参数个数。
# 获取第10个及之后的参数加大括号 ${10}。$号还能显示很多东西,这里就不列举了。
数组
只有一维数组。
array=(huo ge "wo") #
array[3]=zi #
echo ${array[3]} # 输出zi。
echo ${array[@]} # 输出huo ge wo zi 。*号可以代替@号。
echo ${#array[@]} # 输出4。数组的元素个数。
函数
函数定义后才能使用
cxk(){ # 定义函数。
echo "这只是个函数"
return 2 # 可以返回0-255之间的数。省略时,返回最后一条命令的运行状态,正常为0。$?可以读取最后一条指令的返回状态,正常为0,可以利用$?获得return值。
}
cxk # 调用函数。
cxk c t r l # 调用时传递参数,用法和脚本的参数一样。
if与比较
if [ 4 -lt 5 ] # -lt:左侧数是否小于右则数。空格不能省略。
then
{
echo "4小于5"
echo "没错"
}
else # else后面没有命令的话,就不要写else。
echo "4不就是小于5吗?"
fi
# 也可以写成一行。
if [ 4 -lt 5 ];then { echo "4小于5";echo "没错";};else echo "4不就是小于5吗?";fi
!
布尔取非,&&
、-a
布尔与运算(and),||
、-o
布尔或运算(or)。建议用-a
、-o
,这两个使用多一些,可以用在test命令中。
数字比较符号:
符号 | 含义 | 符号 | 含义 |
---|---|---|---|
-eq 或== | equal左数是否等于右数 | -ne 或 != | not equal左数是否不等于右数 |
-lt | litter than是否小于 | -gt | greater than是否大于 |
-le | litter、euqal是否小于等于 | -ge | greater、equal是否大于等于 |
字符串的比较用=
、!=
,另外,可以用-z、-n,比如[ -z $str ]
、[ -n "buweiling" ]
,分别判断字符串长度是否为0
、长度是否不为0
。[ $str ]
,可以判断字符串变量str是否不为空。
test
测试条件真假,常和if
配合使用,可以做数字、字符、文件相关的判断。
if test 4 -lt 5 # test 4 -lt 5和[ 4 -lt 5 ]一样
then echo "4小于5"
fi
测试文件。
if test -e /home # -e判断文件是否存在。test -e /home和[ -e /home ]一样
then echo '文件已存在!'
else echo '文件不存在!'
fi
一些常用的文件比较符号:
符号 | 测试的文件含义 |
---|---|
-e | 是否存在 |
-r | 是否存在且可读 |
-w | 是否存在且可写 |
-x | 是否存在且可执行 |
-s | 是否存在且有字符 |
-d | 是否存在且是目录 |
-f | 是否存在且是普通文件 |
-c | 是否存在且是字符型文件 |
-b | 是否存在且是块文件 |
循环
for cxk in c t r l
do echo $cxk
done
for(( a=1; a < 5; a=`expr $a + 1 ` )) # 反引号可以执行bash外的其他命令,expr可以计算表达式。中间不加参数是无限循环,for(( ; ; ))。
do echo $a
done
a=1
while(( $a<=10 )) # while :和while true是无限循环。
do
echo $a
a=`expr $a + 1 `
done
a=1
until [ $a -eq 5 ] # 条件是true时停止循环。[ $a -eq 5 ]和 test $a -eq 5 一样。
do
echo $a
a=`expr $a + 1 `
done
循环中可以使用break
和continue
。
case-in
love="can beat everything"
case $love in
"a") echo a ;;
"b") { echo b; } ;;
"can beat everything") echo "love "$love ;;
esac