shell

  1.  数据类型

数字

在Shell中所有的变量默认都是字符串型。也就是说,如果不手工指定变量的类型,那么所有的数值都是不能进行运算的:

如果想要进行数学运算,可以使用“$((运算式))”或“$[运算式]”方式运算:

字符串

1.your_name='this is a string' 或 your_name="this is a string"

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

2.greeting_1="hello, ${your_name} !"  #”=”两边没有空格

greeting_2='hello, '$your_name' !'

3.字符串长度:${#your_name} # 输出16

4.提取子字符串: ${your_name:1:4} # 输出 his is a string

5.查找子字符串:`expr index "$your_name" is` #输出3

在Shell中所有的变量默认都是字符串型

数组

1.array_name=(value0 value1 value2 value3)  或

array_name[0]=value0

array_name[1]=value1

array_name[n]=valuen

2.valuen=${array_name[n]}

获取所有变量${array_name[@]}

3.获取数组的长度

# 取得数组元素的个数length=${#array_name[@]}

# 或者length=${#array_name[*]}

# 取得数组单个元素的长度lengthn=${#array_name[n]}

  1. 变量

变量定义

a=1

删除变量

unset a

只读变量定义

readonly b=2

变量使用

c=${b} 或 c=$b

3. Shell运算符

a=10,b=20

算数运算符

+  -  *  /  %  =  ==  != `

`expr $a \* $b返回 200

[ $a == $b ] 返回 false  #中括号,空格

关系运算符

-eq  -ne  -gt  -lt  -ge  -le

[ $a -eq $b ] 返回 false

布尔运算符

!  -o  -a

[ $a -lt 20 -o $b -gt 100 ] 返回 true

逻辑运算符  

&&   ||

[ $a -lt 100 && $b -gt 100 ]]返回 false

字符串运算符

=  !=  -z  -n  $

[ -z $a ] 返回 false  [ -n "$a" ] 返回 true

4. Shell 流程控制

4.1选择

if condition

then

    command1

    command2

    ...

commandN

fi

if condition

then

    command1

    command2

    ...

commandN

else

command

fi

if condition1

then

command1

elif condition2

then

command2

else

commandN

fi

4.2 test命令

num1=100

num2=100

if test $[num1] -eq $[num2]

then

echo '两个数相等!'

else

echo '两个数不相等!'

fi

4.3循环

#!/bin/bash

for loop in 1 2 3 4 5

do

echo "The value is: $loop"

done

#!/bin/bash

int=1

while(( $int<=5 ))#两括号

do

    echo $int

let "int++"

done

#!/bin/bash

a=0

until [ ! $a -lt 10 ] #until(( a>=10 ))

do

   echo $a

   a=`expr $a + 1`

done

-lt用[], <=用(())

4.4 Case

echo '输入 1 到 4 之间的数字:'

echo '你输入的数字为:'

read aNum

case $aNum in

    1)  echo '你选择了 1'

    ;;

    2)  echo '你选择了 2'

    ;;

    3)  echo '你选择了 3'

    ;;

    4)  echo '你选择了 4'

    ;;

    *)  echo '你没有输入 1 到 4 之间的数字'

;;

esac

4.5 Break和continue

#!/bin/bash

while :

do

    echo -n "输入 1 到 5 之间的数字:"

    read aNum

    case $aNum in

        1|2|3|4|5) echo "你输入的数字为 $aNum!"

        ;;

        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"

            break

        ;;

esac

done

#!/bin/bash

while :

do

    echo -n "输入 1 到 5 之间的数字: "

    read aNum

    case $aNum in

        1|2|3|4|5) echo "你输入的数字为 $aNum!"

        ;;

        *) echo "你输入的数字不是 1 到 5 之间的!"

            continue

            echo "游戏结束"

        ;;

esac

done

5. Shell 函数

[ function ] funname [()]

{

    action;

    [return int;]

}

#!/bin/bash

demoFun(){

echo "这是我的第一个 shell 函数!"

}

echo "-----函数开始执行-----"

demoFun

echo "-----函数执行完毕-----"

#!/bin/bash

funWithReturn(){

    echo "这个函数会对输入的两个数字进行相加运算..."

    echo "输入第一个数字: "

    read aNum

    echo "输入第二个数字: "

    read anotherNum

    echo "两个数字分别为 $aNum 和 $anotherNum !"

return $(($aNum+$anotherNum))

}

funWithReturn

echo "输入的两个数字之和为 $? !"

#!/bin/bash

funWithParam(){

    echo "第一个参数为 $1 !"

    echo "第二个参数为 $2 !"

    echo "第十个参数为 $10 !"

    echo "第十个参数为 ${10} !"

    echo "第十一个参数为 ${11} !"

    echo "参数总数有 $# 个!"

echo "作为一个字符串输出所有参数 $* !"

}

funWithParam 1 2 3 4 5 6 7 8 9 34 73

 

6.参数传递

#!/bin/bash

echo "Shell 传递参数实例!";

echo "执行的文件名:$0";

echo "第一个参数为:$1";

echo "第二个参数为:$2";

echo "第三个参数为:$3";

$ chmod +x test.sh

$ ./test.sh 1 2 3Shell

传递参数实例!

执行的文件名:./test.sh  #实际文件名

第一个参数为:1

第二个参数为:2

第三个参数为:3

$#

传递到脚本的参数个数

$*

以一个单字符串显示所有向脚本传递的参数。

如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。

$!

与$*相同,但是使用时加引号,并在引号中返回每个参数。

如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数

$$

脚本运行的当前进程ID号

7. Shell的输入输出

7.1 echo

显示普通字符串

echo "It is a test"

显示转义字符

echo "\"It is a test\""

显示变量

echo "$name It is a test"

显示换行

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

显示不换行

echo -e "OK! \c" # -e 开启转义 \c 不换行

显示结果定向至文件

echo "It is a test" > myfile

7.2 printf

printf  format-string  [arguments...]

printf "%-10s %-8s %-4.2f\n" 郭靖 男 66.1234

7.3 Read

read [-options] [variables]

-a array

把读取的数据赋值给数组 array,从下标 0 开始。

-d delimiter

用字符串 delimiter 指定读取结束的位置,而不是一个换行符(读取到的数据不包括 delimiter)。

-e

在获取用户输入的时候,对功能键进行编码转换,不会直接显式功能键对应的字符。

-n num

读取 num 个字符,而不是整行字符。

-p prompt

显示提示信息,提示内容为 prompt。

-r

原样读取(Raw mode),不把反斜杠字符解释为转义字符。

-s

静默模式(Silent mode),不会在屏幕上显示输入的字符。当输入密码和其它确认信息的时候,这是很有必要的。

-t seconds

设置超时时间,单位为秒。如果用户没有在指定时间内输入完成,那么 read 将会返回一个非 0 的退出状态,表示读取失败。

-u fd

使用文件描述符 fd 作为输入源,而不是标准输入,类似于重定向。

7.4 输入输出重定向

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 之间的内容作为输入。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值