一文快速入门Shell脚本_了解Sheel脚本基本命令

通过代码和注释的形式,列举了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

循环中可以使用breakcontinue

case-in

love="can beat everything"
case $love in
"a") echo a ;;
"b") { echo b; } ;;
"can beat everything") echo "love "$love ;;
esac

猜你喜欢

转载自www.cnblogs.com/foxer-z/p/12421789.html