Linux基础(二)

循环语句

test:
printf(“请输入你的数字和选择的进制:”);
scanf(“%d%d”,&num,&jz);
if(jz != 2 && jz != 16)
{
puts(“输入有误,重新输入你的进制:”);
goto p;
}
change(num,jz);
return 0;
}
文件:
判断文件的类型:
-e:判断文件是否存在
-L:判断文件是否存在,如果存在,是否为链接文件
-S:判断文件是否存在,如果存在,是否为套接字文件
-p:判断文件是否存在,如果存在,是否为管道文件
-b:判断文件是否存在,如果存在,是否为块设备文件
-c:判断文件是否存在,如果存在,是否为字符设备文件
-d:判断文件是否存在,如果存在,是否为目录文件
-f:判断文件是否存在,如果存在,是否为普通文件
一般形式:test 选项 文件名
1 #!/bin/bash
2
3 test -f 1.c
4 echo $?
5
6 test -e zc.c
7 echo $?
8
9 test -d zc
10 echo $?
判断文件的权限:
-r:判断文件是否有可读权限
-w:判断文件是否有可写权限
-x:判断文件是否有可执行权限
wc:查看普通文件的行数,单词数,字符个数
-l:只查看行数
-w:只查看单词数
-c:只查看字符个数
判断文件的时间戳
test 文件1 -nt 文件2:判断文件1是否比文件2新
test 文件1 -ot 文件2:判断文件1是否比文件2旧

1 #!/bin/bash
2
3 test -f 1.c
4 echo $?
5
6 test -e zc.c
7 echo $?
8
9 test -d zc
10 echo $?
11
12 test -x 1.c
13 echo $?
14
15 test 1.c -ot 3.c
16 echo $?

【】:
可以实现test的效果
但是在使用时需要在两边空开

1 #!/bin/bash
2
3 [ -f 1.c ]
4 echo $?
5
6 [ -e zc.c ]
7 echo $?
8
9 [ -d zc ]
10 echo $?
11
12 [ -x 1.c ]
13 echo $?
14
15 [ 1.c -ot 3.c ]
16 echo $?

控制语句:
条件判断语句
单分支的一般形式:
if test 判断shell语句
then
• shell语句
fi
例如:

1 #!/bin/bash
2
3 if test -e zc.c
4 then
5 echo "hello world"
6 fi

或者

1 #!/bin/bash
2
3 if [ -e zc.c ]
4 then
5 echo "hello world"
6 fi

双分支的一般形式:
if test 判断shell语句
then
• shell语句1
else
shell语句2
fi
例如:

1 #!/bin/bash
2
3 if [ -e zc.c ]
4 then
5 echo "hello world"
6 else
7 echo "zhangcheng"
8 fi

多分支的一般形式:
if test 判断shell语句
then
• shell语句1
elif 判断语句2
then
shell语句2
else
shell语句3
fi
例如:

1 #!/bin/bash
2
3 if [ -e 1.c ]
4 then
5 echo "hello world"
6 elif [ -f 1.c ]
7 then
8 echo "day3"
9 else
10 echo "zhangcheng"
11 fi

练习:
输入一个文件名,判断这个文件是否存在,如果存在,判断是否有可写权限,如果有,把”
helloworld“写到文件里面,如果没有权限,增加可写权限,再把helloworld写进去,如果不存在,创建
文件,把helloworld写进去

1 #!/bin/bash
2
3 read -p "please input a filename" filename
4 if test -e $filename
5 then
6 if test -w $filename
7 then
8 echo "hello world" >>$filename
9 else
10 chmod +w $filename
11 echo "hello world" >>$filename
12 fi
13 else
14 touch $filename
15 echo "hello world" >>$filename
16 fi

选择语句
一般形式:
case 变量 in
区间1)
shell语句1
;;
区间2)
shell语句2
;;
。。。。。。。。
*)
shell语句;
;;
esac
例如:

1 #!/bin/bash
2
3 read val
4 case $val in
5 [1-9])
6 echo "hello world"
7 ;;
8 2)
9 echo "zhangcheng"
10 ;;
11 3)
12 echo "day3"
13 ;;
14 *)
15 echo "240201"
16 ;;
17 esac

练习:
输入一个学生的成绩,判断该学生成绩的等级
90-100 A
80-89 B
70-79 C
60- 69 D
60以下 不及格

3 read -p “请输入一个百分制的成绩:” val
4 case $val in
5 100)
6 echo “A”
7 ;;
8 9?)
9 echo “A”
10 ;;
11 8?)
12 echo “B”
13 ;;
14 7?)
15 echo “C”
16 ;;
17 6?)
18 echo “D”
19 ;;
20 *):
21 echo “不及格”
22 esac

while

一般形式:

`
``shell
while test 判断语句
do
循环语句
done

例子:循环10次
```shell
#!/bin/bash
i=10
while test $i -gt 0
do
	echo "hello world"
	#i=$[$i-1]#二选一
	#((i--))
done
bash filename.sh
while true--死循环

for

第一种:

for((i=0;i<10;i++))
do
	shell语句
done

例子:

#!/bin/bash
for((i=0;i<10;i++))
do
	echo"hello world"
done

第二种:
通过后面的单词表个数设置循环次数,每次循环都会把单词依次赋值给变量

for 变量 in 单词表
do#
	循环体
done

例子:

#!/bin/bash
for i in hello world nihao shijie
do
	echo $i
done

第三种:
会将连续的数字或者字母依次赋值给变量,设置循环次数

for 变量 in {n..m}
do
	循环体
done

例子:

#!/bin/bash
for i in {1..100}
do
	echo $i
done
#!/bin/bash
for i in {a..z}
do
	echo $i
done

练习:
求1-100的和

#!/bin/bash
#方法一
sum=0
for((i=0;i<=100;i++))
do  
     sum=$((sum+i))
done
echo "1-100求和为:$sum"
#方法二
a=0 
for i in {1..100}
do 
    let  a+=$i
done
echo "1-100求和为:$a"

shell数组

没有数据类型,只有一维数组
数组的初始化:数组名+(元素1 元素2 元素3 等)
数组的调用:${数组名【元素下标】}--下标从0开始
数组的长度:${#数组名【*】}
数组的全部元素的访问:${数组名【*】}或者${数组名【@】}
例子

#!/bin/bash
ARR=(hello world nihao shijie)#一维数组初始化
echo ${ARR[2]}
echo ${ARR[*]}#*和@一样
echo ${ARR[@]}#用于测量数组长度

练习:数组的遍历

#!/bin/bash

# 定义一个数组
fruits=("apple" "banana" "orange" "grape")

# 使用for循环遍历数组
echo "遍历数组中的水果:"
for fruit in "${fruits[@]}"; do
    echo "$fruit"
done
#!/bin/bash

a=("1" "2" "3" "4" "5" "6" "7")

for b in "${a[@]}"; do
    echo "$b"  # 在echo和$b之间加上一个空格
done

字符串的切片操作

一般形式::${字符串:起始位置:截取长度}
例如:

#!/bin/bash

ARR=(he11o world nihao shijie)
ARR[2]="zhangcheng"
echo ${ARR[2]:1:5}
str="he11o world"
echo ${str:3:5}

shell函数

#!/bin/bash
function zc()
{
}
day3()
{
}

函数没有数据类型,没有形参,但是可以传参,用$1 2..... 依次接受实际参数 i 数里面定义的变量都是全局变量,但是需要调用函数,使该变量生效,如果要用局部变量,需要用 l o c a l 定义返回值:可以有返回值,用 2.... .依次接受实际参数 i数里面定义的变量都是全局变量,但是需要调用函数,使该变量生效,如果要用局部变量,需要用local定义 返回值:可以有返回值,用 2.....依次接受实际参数i数里面定义的变量都是全局变量,但是需要调用函数,使该变量生效,如果要用局部变量,需要用local定义返回值:可以有返回值,用?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

磁铁的朋友

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值