shell脚本补充

输入输出

输出:echo

echo 字符串
echo '字符串'
echo "字符串"
echo -n "字符串"     取消换行
echo -e "字符串"     使转义字符生效

输入:read

输入一个或多个变量:数据元素之间用空格,Tab表示数据输入的结束,回车表示read的结束

read a

read a b c d

显示提示语句

 

read -p "字符串" a

例:

read -p "please enter a:" a

please enter a:

输入n个字符自动结束

read -n num a //输入num个字符自动结束

n秒不输入自动结束

read -t num a //num秒不输入自动结束

隐藏输入(密码输入)

read -s a //隐藏输入

输入数组

read -a arr

echo ${arr[0]} //数组的输出

shell的字符串

C语言的字符串是一个数组,shell的字符串是一个变量

计算字符串长度

格式:

${#str}

字符串拼接

格式:

a="hello"

b="world"

c="$a $b"

字符串截取

正向截取

${str:m} //从左到右,从0开始,截取第m以后的所有字符串

${str:m:n} //从左到右,从0开始,截取第m开始n个字符

反向截取

${str:0-m} //从右到左,从1开始,截取第m以后的所有字符串

${str:0-m:n} //从右到左,从1开始,截取第m开始n个字符

# ## % %%

string:分隔符

${str#*string} //从左到右,截取第一个分隔符以后的所有字符串

${str##*string} //从左到右,截取最后一个分隔符以后的所有字符串

${str%string*} //从右到左,截取第一个分隔符以后的所有字符串

${str%%string*} //从右到左,截取最后一个分隔符以后的所有字符串

shell的数组

C语言中存在多维数组,shell中只有一维数组,不存在多维数组

shell中输入的每个元素是字符串

数组的定义格式以及初始化

数组的定义及初始化

arr=(100 11 22 33) //()是shell中数组的标志

shell支持稀疏数组,数组长度为2

arr=([0]=100 [3]=hello)

shell的单个赋值

arr[0]=100

arr[3]=300

shell可以追加赋值

arr=(11 22 33)

arr[3]=hello

数组拼接

a=(11 22)

b=(33 44)

c=(${a[*]} ${b[*]})

c=(${a[@]} ${b[@]})

数组的引用

arr=(11 22 33)

单个引用

${arr[0]}

引用所有数组元素,默认中间用空格隔开

${arr[*]}

${arr[@]}

计算数组长度

${#arr[*]}

${#arr[@]}

练习:

定义数组初始化为当前目录下的所有.sh文件名,打印.sh文件的个数

定义数初始化为终端输入的字符串,打印所有字符串

输入一个数组,打印数组的所有元素

运算符

shell不擅长算数运算,擅长字符串以及文件的相关操作

shell的运算符:

(()):实现算数运算,关系运算,逻辑运算,条件运算,逗号等 针对整数

$[]:实现算数运算,关系运算,逻辑运算,条件运算,逗号等 针对整数

let:实现算数运算,关系运算,逻辑运算,条件运算,逗号等 针对整数

expr:实现字符串,关系运算,逻辑运算

(())

格式:

((表达式))

引用:

((变量=表达式))

变量=$((表达式))

特点:

表达式的空格可有可无

表达式的$可有可无

(())可以实现任意复杂的运算:算数,关系,逻辑,条件等

(())可以实现自增自减运算

(())可以实现幂运算

((2**3)) //只能有两个*

练习:

输入一个数,判断是否是水仙花数,如果是水仙花数则赋值为1,否则赋值为0

输入一个秒数,计算几时几分几秒

$[]

格式:

变量=$[表达式]

特点:

表达式的空格可有可无

表达式的$可有可无

$[]可以实现任意复杂的运算:算数,关系,逻辑,条件等

$[]可以实现自增自减运算

$[]可以实现幂运算

$[2**3] //只能有两个*

练习:

输入三个数,计算最大值

let

格式:

let 变量=表达式 //不可以存在空格

let "变量=表达式" //可以存在空格

特点:

表达式的空格可有可无

表达式的$可有可无

let可以实现任意复杂的运算:算数,关系,逻辑,条件等

let可以实现自增自减运算

let可以实现幂运算

let a=2**3 //只能有两个*

expr

expr是一个指令,可以用man手册查看

expr可以进行整数(算数,关系,逻辑),字符串运算

格式:

变量=$(expr 表达式)

变量=`expr 表达式`

特点:

表达式的空格必须存在

表达式的$必须存在,在必要需要时添加""

expr可以实现算数,关系,逻辑,条件等运算

expr不可以实现自增自减运算,不可以实现幂运算

算数运算

ARG1 < ARG2

ARG1 is less than ARG2

ARG1 <= ARG2

ARG1 is less than or equal to ARG2

ARG1 = ARG2

ARG1 is equal to ARG2

ARG1 != ARG2

ARG1 is unequal to ARG2

ARG1 >= ARG2

ARG1 is greater than or equal to ARG2

ARG1 > ARG2

ARG1 is greater than ARG2

value=`expr ARG1 > ARG2`

逻辑运算

ARG1 | ARG2

ARG1 if it is neither null nor 0, otherwise ARG2

如果ARG1为真,ARG2为真,则结果是ARG1

如果ARG1为真,ARG2为假,则结果是ARG1

如果ARG1为假,ARG2为真,则结果是ARG2

如果ARG1为假,ARG2为假,则结果是0

ARG1 & ARG2

ARG1 if neither argument is null or 0, otherwise 0

如果ARG1为真,ARG2为真,则结果是ARG1

如果ARG1为真,ARG2为假,则结果是0

如果ARG1为假,ARG2为真,则结果是0

如果ARG1为假,ARG2为假,则结果是0

变量=`expr ARG1 & ARG2`

字符串运算

返回REGEXP在STRING中出现重复的字符个数,REGEXP需要是STRING的子串且从头开始

match STRING REGEXP

same as STRING : REGEXP

a=he

str=hello

value=`expr match $str $a`

value=`expr match $str $a` //a在str中相同字符的个数

字符串截取

substr STRING POS LENGTH

substring of STRING, POS counted from 1

格式:

变量=`expr substr $str 5 5`

str=www.baidu.com

value=`expr substr $str 5 5` baidu

查找字符在字符串中出现的下表,不存在返回0

index STRING CHARS

index in STRING where any CHARS is found, or 0

格式:

变量=`expr index $str $a`

str=hello

a=l

value=`expr index $str $a`

计算字符串长度

length STRING

length of STRING

格式:

变量=`expr length $str`

str=hello world

value=`expr length $str`

shell的选择结构

C语言的选择结构:单分支if 双分支if...else 多分支if...else if switch

shell的选择结构:单分支if 双分支if...else 多分支if...elif case...in

选择结构格式

单分支

if 表达式

then

shell语句

fi

双分支

if 表达式

then

shell语句1

else

shell语句2

fi

多分支

if 表达式1

then

shell语句1

elif 表达式2

then

shell语句2

......

else

shell语句n

fi

练习:

输入一个数判断是否是偶数

输入两个变量实现两个数的排序(单分支)

输入一个数,判断是否时水仙花数(双分支)

输入一个分数,实现等级判断(多分支)

90-100 A

80-89 B

780218

test指令

  1. 一般if语句不直接和运算符结合,多和test指令结合
  2. test是个指令,必须存在空格,必须添加$,必要时加""
  3. test指令实现:逻辑运算,整数关系,字符串,文件
  4. test等价于[]

if test 表达式

then

shell语句

fi

关系运算

判断两个整数相等
if test $a -eq $b   --->if [$a -eq $b]
判断整数1大于等于整数2
if test $a -ge $b   --->if [$a -ge $b]
判断整数1大于整数2
if test $a -gt $b   --->if [$a -gt $b]
判断整数1小于等于整数2
if test $a -le $b   --->if [$a -le $b]
判断整数1大于整数2
if test $a -lt $b   --->if [$a -lt $b]
判断两个整数不等
if test $a -ne $b   --->if [$a -ne $b]

练习:

输入三个数,实现从小到大排序

输入一个数判断是否时奇数

逻辑运算

格式:if [表达式1 -a 表达式2]

格式:if [表达式1] && [表达式2]

格式:if [表达式1 -o 表达式2]

格式:if [表达式1] || [表达式2]

判断表达式为真

if [$a -ne 0] --->if [$a]

判断表达式为假

if [$a -eq 0] --->if [ !$a ]

逻辑与

if [$a -ge 90 -a $a -le 100] --->if [$a -ge 90] && [$a -le 100]

逻辑非

if [$a -lt 0 -o $a -gt 100] --->if [$a -lt 0] || [$a -gt 100]

练习 

 

输入一个年份,判断是否为闰年

 #!/bin/bash
 
 read -p " 输入一个年份" year
 if test $((year%4)) -eq "0" -a $((year%100)) -ne "0" -o $((year%400)) -eq "0"
 then
     echo "是闰年"
 else
     echo "不是闰年"
 fi

 

A:a=9

B:a=10

CD赋值左边需是变量,a++和++a不是变量 

#include<>是直接在库文件下查找filename.h文件

#include""先在当前文件路径下查找,若找不到再到库文件中查找filename.h文件 

 

char str[128]="";
gets(str);
int i=0;
fun(i,str);
void fun (int i,char* p)
{
while(*(p+i)=' ')                //跳过空格
{
    i++                                              
}
int k=i;
if (*(p+i)=='-'||*(p+i)=='+')   //判断+,-
    i++;
int sum=0;
while(*(p+i))                //while(str[i]!='\0')
{
    if (*(p+i)>='0'&&*(p+i)<='9')
    {
        sum=sum*10+(*(p+i)-'0');
    }
    else
        break;
    i++;
}
if(*(p+k)=='-')
    sum=-sum;
printf("sum=%d\n",sum);
}

 

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值