解决centos 错误 curl: (6) Could not resolve host

本机IP和虚拟机IP不能是同一个网段,VMware虚拟网络管理中修改虚拟机IP网段。

追加重定向>>

在文件原来内容基础上追加上新的内容

覆盖重定向>

可以发现之前的123456被789给覆盖掉了

<和<<

在屏幕上输出EOF之间你所输入的内容。(EOF可以被替换为任意字符,只要前后开头结尾一致即可)

将文件中的wobuhao覆盖成了wohenhao

在文件中的wobuhao的基础上追加了wohenhao。

shell脚本

建立/删除user1…user100个用户

建立/root/A/a.sh并写入内容“测试”

脚本的执行

1使用指定的shell解释器:(不需要脚本有执行权限),会重新加载一个子bash环境去执行,不会影响当前bash环境变量值,常使用。

2使用路径的方式:(需要脚本有执行权限)

3使用source和“.”执行脚本:(需要脚本有执行权限),会在当前执行命令的终端去执行脚本,效果直接影响当前终端。

1和2都是在子终端内执行脚本,只有3是在当前终端执行。

test1文件内容:echo $x

所以用1和2的方式去执行test1.sh脚本时并不会显示10,因为都不是在当前终端执行的。只有3是在当前终端执行,所以只有3才会显示10

常见的比较运算符号 (g≈大于、l≈小于、e≈等于)

字符串类型比较用符号,数字比较用字母

1
2
3
4
5
6
7
8
9
10
11
12
13
read -p "请输入你的成绩:" grade
if [ $grade = 100 ]
then
echo "满分"
elif [ $grade -lt 100 -a $grade -gt 80 ]
then
echo "优秀"
elif [ $grade -lt 80 -a $grade -gt 60 ]
then
echo "及格"
else
echo "不及格"
fi

【while循环】

#########################

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
	while  [ 判断条件  ]
​ do
​ 循环体
​ 计数器(否则死循环)
​ done
############【shell脚本内while的死循环写法技巧】#############

while :
do
循环体
done


############【while循环+read读取文件】##############

while read 变量
do
循环体
done <文件路径

##########################

练习

for循环求和

1
2
3
4
5
6
sum=0
for i in {1..100}
do
let sum=$sum+$i
done
echo $sum

输入一个用户查看是否存在,存在的话显示该用户存在,并询问是否需要修改密码。不存在的话显示该用户不存在然后创建该用户。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
read -p "请输入用户名:" user
id $user &>/dev/null
if [ $? -eq 0 ]
then
echo "该用户存在"
read -p "是否需要修改密码【Y/是|N/否】" x
if [ $x = "Y" ]
then
read -p "请输入你要修改的密码:" pass
echo "$pass" | passwd --stdin $user
#echo命令会将"pass"字符串输出到标准输出,然后通过管道(|)将其传递给passwd命令的--stdin选项。passwd命令接收到标准输入中的密码后,将其作为新密码设置给用户"pass"
#命令:|
#表示管道,上一条命令的输出,作为下一条命令参数进行传递,如:ls | grep “aa”,在ls的输出中查找aa字符串
fi
else
echo "该用户不存在"
useradd $user
echo "$user创建成功"
fi

echo $? 可以查看上一条命令执行是否正确,正确则返回0,不对则返回非0. 2>/dev/null 是将错误结果丢进垃圾箱。将2改成&则是不管结果是正确还是错误都丢进垃圾箱。

【作业及答案】

下述第一种为标准答案,第二种为自己所写。

1、提示用户输入数字,并计算从何1开始到这个数字的相加总和;

1
2
3
4
5
6
7
8
9
#答案
#!/bin/bash
sum=0
read -p "请输入正整数: " num
for i in `seq $num`
do
sum=`echo "$sum + $i"|bc`
done
echo "总和:$sum"
1
2
3
4
5
6
7
8
9
10
11
12
13
sum=0
i=1
read -p "请输入一个数:" A
for i in `seq 1 $A`
do
let sum=$sum+$i
done
#while [ $i -le $A ]
#do
# let sum=$sum+$i
# let i++
#done
echo $sum

2、将用户名放在/root/username.txt文件中(每行一个用户名),书写脚本判断username.txt中的用户是否存在,
存在则删除,用户不存在则创建;

1
2
3
4
5
6
7
8
9
10
11
12
13
#答案
#!/bin/bash
while read user
do
id $user &>/dev/null
if [ $? -eq 0 ]
then
userdel -r $user
else
useradd $user
fi

done </root/user.txt
1
2
3
4
5
6
7
8
9
10
while read user
do
id $user &>/dev/null
if [ $? -eq 0 ]
then
userdel -r $user
else
useradd $user
fi
done </root/username.txt

3、使用脚本模拟获得用户密码登陆,判断用户密码是否正确(用户密码为123),如果连续3次输入错误,则退出脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#答案
#!/bin/bash

while :
do
read -p "请输入你的用户名: " name
if [ "$name" == "Alan" ] || [ "$name" == "alan" ]
then
for i in {1..3}
do
read -p "请输入密码: " pass
if [ $pass -eq 123 ]
then
echo "登陆成功。"
exit 0
else
echo "密码验证错误:请重新输入。"
fi
done
echo "====== 超过尝试次数,被强制退出。======"
exit 1
else
echo "*****没有这个账号,请重新输入。*****"
echo
fi

done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
while :
do
read -p "请输入用户名:" name
if [ $name = "ldq" ] || [ $name = "Ldq" ]
then
i=0
while [ $i -lt 3 ]
do
read -p "请输入登陆密码" p
if [ $p -eq 123 ]
then
echo "登陆成功"
exit


else
echo "密码错误,请再次输入"
fi
let i++
done
exit
fi
done
#exit后跟数字可以控制返回值,即$?得到的值

4、使用脚本获取用户注册账号并生成一个8位随机密码,要求密码开头必须包含用户名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#答案
#!/bin/bash

read -p "请输入你的账号: " user

num=`echo $user|wc -L`
n1=$(($RANDOM % 10 + 0 ))
n2=$(($RANDOM % 10 + 0 ))
n3=$(($RANDOM % 10 + 0 ))
n4=$(($RANDOM % 10 + 0 ))
n5=$(($RANDOM % 10 + 0 ))
n6=$(($RANDOM % 10 + 0 ))
n7=$(($RANDOM % 10 + 0 ))

if [ $num -ge 8 ]
then
echo "用户名过长,无法生成密码。"
else
if [ $num -eq 7 ]
then
passwd=$user$n1
echo "请牢记你的密码:$passwd"
elif [ $num -eq 6 ]
then
passwd=$user$n1$n2
echo "请牢记你的密码:$passwd"
elif [ $num -eq 5 ]
then
passwd=$user$n1$n2$n3
echo "请牢记你的密码:$passwd"
elif [ $num -eq 4 ]
then
passwd=$user$n1$n2$n3$n4
echo "请牢记你的密码:$passwd"
elif [ $num -eq 3 ]
then
passwd=$user$n1$n2$n3$n4$n5
echo "请牢记你的密码:$passwd"
elif [ $num -eq 2 ]
then
passwd=$user$n1$n2$n3$n4$n5$n6
echo "请牢记你的密码:$passwd"
elif [ $num -eq 1 ]
then
passwd=$user$n1$n2$n3$n4$n5$n6$n7
echo "请牢记你的密码:$passwd"
else
echo "账号不能为空!"
fi
fi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
read -p "请输入注册账号:"  user
num=`echo $user|wc -L`
n1=$(($RANDOM% 10 + 0))
n2=$(($RANDOM% 10 + 0))
n3=$(($RANDOM% 10 + 0))
n4=$(($RANDOM% 10 + 0))
n5=$(($RANDOM% 10 + 0))
n6=$(($RANDOM% 10 + 0))
n7=$(($RANDOM% 10 + 0))
if [ $num -ge 8 ]
then
echo "账号过长"
elif [ $num -eq 7 ]
then
p=$user$n1
echo "你的密码为:$p"
elif [ $num -eq 6 ]
then
p=$user$n1$n2
echo "你的密码为:$p"
elif [ $num -eq 5 ]
then
p=$user$n1$n2$n3
echo "你的密码为:$p"
elif [ $num -eq 4 ]
then
p=$user$n1$n2$n3$n4
echo "你的密码为:$p"
elif [ $num -eq 3 ]
then
p=$user$n1$n2$n3$n4$n5
echo "你的密码为:$p"
elif [ $num -eq 2 ]
then
p=$user$n1$n2$n3$n4$n5$n6

echo "你的密码为:$p"

elif [ $num -eq 1 ]
then
p=$user$n1$n2$n3$n4$n5$n6$n7
echo "你的密码为:$p"
else
echo "账号不能为空!"
fi
1
2
3
4
5
6
7
8
9
10
11
12
#命令行
wc -l /filepath
#参数说明
-c, --bytes:统计字节数。

-m, --chars:统计字符数。

-w, --words:统计字数。

-l, --lines:统计行数。

-L, --max-line-length:统计最长行的长度。

时间命令

1.Linux系统时间

1
2
3
4
5
6
🕧查看时间
# date
🕞以自己想要的格式查看时间
# date "+%Y__%m__%d %H::%M::%S"
🕔自己设置系统时间
# date -s "2050-12-25 12:25:41"

2.硬件时间

1
2
3
4
5
6
🕘查看硬件时间
# hwclock
🕤强制把系统时间写入硬件(cmos)中
# hwclock -w
🕤"-s" 相反, 将硬件时间写入系统时间
# hwclock -s

3.NTP时间协调 服务器

1
2
3
4
5
6
🕢同步网络时间
# ntpdate ntp1.aliyun.com
🔵查看时间是否更新了
# date
🔵然后将其写入硬件时间把我们之前乱写的时间改回来
# hwclock -w

🍥这里说的系统时间,是linux由操作系统维护的

🍭硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟,硬件时间存放于CMOS中

🍥系统时钟则是指内核(kernel)中的时钟,当Linux启动时,Linux操作 系统将时间从CMOS中读到系统时间变量

🍭之后系统时钟即独立运作, 所有Linux相关指令与函数都是读取系统时钟的设定

🍥为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS

🍭由于该同步是每隔一段时间(大约是11分钟) 进行的,
在我们执行”date -s”后,如果马上重起机器,修改时间就有可能没有被写入CMOS

🍥如果要确保修改生效可以执行”hwclock -w” 将其写入硬盘

查看命令的绝对路径

type -a 命令

which 命令