shell脚本2_普通用户没权限访问/var/log/messages-程序员宅基地

技术标签: linux  

Shell脚本2

测试和判断

1、测试 程序运行中经常需要根据实际情况来运行特定的命令或代码块。比如,判断某个文件或目录是否存在,如果不存在,则需要创建。例如:

[root@shell ~]# ls /var/log/messages

/var/log/messages

[root@shell ~]# echo $?

0

[root@shell ~]# ls /var/log/messages004

ls: 无法访问/var/log/messages004: 没有那个文件或目录

[root@shell ~]# echo $?

2

测试结构:

测试的第一种:

使用方式是直接使用test命令,格式:

test expression

其中expression是一个表达式,可以是算术比较、字符串比较、文本和文件属性比较等

第二种测试方式:

使用”[“启动一个测试,再写expression,再以”]“结束测试。需要注意的是括号和表达式expression之间都有空格。

推荐使用第二种方式。

[ expression ]

文件测试

shell中提供了大量的文件测试符,其格式如下:

test file_operator FILE

或者

[ file_operator FILE ]

其中file_operator是文件测试符,FILE是文件、目录(可以是文件或目录的全路径)

例如:判断文件是否存在

[root@shell bin]# test -e /var/log/messages

[root@shell bin]# echo $?

0

  1. [root@shell bin]# [ -e /var/log/messages ]

[root@shell bin]# echo $?

0

[root@shell bin]# test -e /var/log/messages004

[root@shell bin]# echo $?

1

<!--常用:-e 文件或者目录是否存在 -f 文件存在且为普通文件 -d 目录是否存在-->

关于权限方面的:

-w 当文件存在且为可写

-r 当文件存在且为可读

-x 当文件存在且为可执行

[root@shell bin]# vim rwx.sh

#!/bin/bash

read -p "what file do you want to test?:" filename

if [ ! -e "$filename" ];then

echo "the file does not exist."

exit 1

fi

if [ -r "$filename" ];then

echo "$filename is readable."

fi

if [ -w "$filename" ];then

echo "$filename is writeable."

fi

if [ -x "$filename" ];then

echo "$filename is executable."

Fi

[root@shell bin]# chmod +x rwx.sh

[root@shell bin]# rwx.sh

what file do you want to test?:/etc

/etc is readable.

/etc is writeable.

/etc is executable.

[root@shell bin]# rwx.sh

what file do you want to test?:abc

the file does not exist.

2、条件判断式

if判断结构

1.if.....then

2、if/else

3、if/elif/else判断结构

4、case判断结构

if是最简单的判断语句,可以针对测试结果做相应处理:如果测试为真则运行相关代码,其语法结构如下:

if expression; then

command

fi

如果expression测试返回真,则执行command。如果要执行的不止一条命令,则不同命令之间用换行符隔开,如下所示:

if expression; then

command1

command2

....

fi

eq: equql平等的,相等的

gt: greater较大的,大于

lt: less then 小于

-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。

-ne 检测两个数是否不相等,不相等返回 true。

[ $a -ne $b ] 返回 true。

-gt 检测左边的数是否大于右边的,如果是,则返回 true。

[ $a -gt $b ] 返回 false。

-lt 检测左边的数是否小于右边的,如果是,则返回 true。

[ $a -lt $b ] 返回 true。

-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。

[ $a -ge $b ] 返回 false。

-le 检测左边的数是否小于等于右边的,如果是,则返回 true。

[ $a -le $b ] 返回 true。

练习:写一个脚本,判断用户得分情况,

如果小于等于30分,那么则输出“好意思么你?”

如果大于30分且小于60分,则输出“加油”

如果大于等于60分,且小于等于85分,则输出“不过,总算及格了”

如果大于等于85分,且小于等于99分,那么则输出“优秀”如果等于100分,则输出“天秀,快坐!”

1、利用if.....then

[root@shell bin]# vim score01.sh

#!/bin/bash

echo -n "please input a score:"

read SCORE

if [ "$SCORE" -le 30 ];then

echo "好意思吗你?去屎!!!"

fi

if [ "$SCORE" -gt 30 -a "$SCORE" -lt 60 ];then

echo "要努力了!"

fi

if [ "$SCORE" -ge 60 -a "$SCORE" -le 85 ];then

echo "嗯,不错,不过你原意一直平庸么?"

fi

if [ "$SCORE" -gt 85 -a "$SCORE" -le 99 ];then

echo "优秀,说的就是你"

fi

if [ "$SCORE" -eq 100 ];then

echo "天秀儿,赶快坐!"

fi

2、if/else

如果if后的判断成立,则执行then后面的内容;否则执行else后面的内容。

语法结构如下:

if expression; then

command

else

command

fi

[root@shell bin]# vim check_file.sh

#!/bin/bash

read -p "请输入你要查询的目录或文件名:" FILE

if [ -e $FILE ];then

echo "$FILE 有有有!"

else

echo "$FILE 没这玩意!"

fi

[root@shell bin]# chmod +x check_file.sh

[root@shell bin]# check_file.sh

请输入你要查询的目录或文件名:/etc

/etc 有有有!

[root@shell bin]# check_file.sh

请输入你要查询的目录或文件名:/etcd

/etcd 没这玩意!

3、if/elif/else判断结构

可以代替if嵌套,语法结构如下:

if expression1;then

command1

elif expression2; then

command2

elif expression3 ; then

command3

...

Fi

练习:写一个脚本,查询用户是否存在,如果存在,则输出“有次用户,它 的UID为:”,如果没有则输出“没有此用户。”

if判断语句刚才我们的添加用户,现在用if来写一个脚本,想一想应该怎么实现?

[root@docker ~]# vim testusr.sh

#!/bin/bash

read -p "请输入想要查询的用户名:" USER

id $USER &> /dev/null

if [ $? -ne 0 ]

then

useradd $USER

echo "没有此用户,并已经为您添加此用户。添加后此用户UID为

`id -u $USER`"

else

echo "此用户已经存在,UID为`id -u $USER`"

fi

输出重定向

> 覆盖重定向

>> 追加重定向

2> 错误重定向

2>> 错误追加重定向

&> 同时重定向,不管真确与否

/dev/null 数据黑洞

//上面这个例子很突然的就给我们添加了一个用户,一般不会这样做的,会询问操作人员,所有我么再来改一改这个脚本。

#!/bin/bash

read -p "请输入想要查询的用户名:" USER

id $USER &> /dev/null

if [ $? -ne 0 ]

then

read -p "没有此用户,请问是否创建此用户?Y/N" YN

if [ $YN == Y ];then

useradd $USER

echo "用户添加成功,用户ID为`id -u

$USER`"

elif [ $YN == N ];then

echo "好的,不进行任何操作,欢迎下次再来!"

else

echo "您的输入有误!"

fi

else

echo "此用户已经存在,UID为`id -u $USER`"

fi

//关于echo 颜色。

\e[1;m 设置高亮加粗

\e[4;m 添加下划线

\e[5;m 闪烁

31m:红色

32m:绿色

33m:黄色

34m:蓝色

35m:紫色

36m:青色

37m:白色

[root@docker ~]# echo -e "\e[1;31m红色\e[0m"

红色

[root@docker ~]# echo -e "\e[4;31m红色\e[0m"

红色

[root@docker ~]# echo -e "\e[5;31m红色\e[0m"

红色

练习:写一个脚本,要求如下

用户输入一个颜色,7中颜色之一,根据用户输入的颜色打印出对应的颜色。

[root@docker ~]# vim yanse.sh

#!/bin/bash

echo "您能输入的颜色有:红色、绿色、黄色、蓝色、紫色、青色、白色"

read -p "请输入你要选取的颜色:" COLOR

if [ $COLOR == "红色" ];then

echo -e "\e[1;31m红色\e[0m"

elif [ $COLOR == "绿色" ];then

echo -e "\e[1;32m绿色\e[0m"

elif [ $COLOR == "黄色" ];then

echo -e "\e[1;33m黄色\e[0m"

elif [ $COLOR == "蓝色" ];then

echo -e "\e[1;34m蓝色\e[0m"

elif [ $COLOR == "紫色" ];then

echo -e "\e[1;35m紫色\e[0m"

elif [ $COLOR == "青色" ];then

echo -e "\e[1;36m青色\e[0m"

elif [ $COLOR == "白色" ];then

echo -e "\e[1;37m白色\e[0m"

else

echo "您的输入有误!"

fi

4、case判断结构

和if/elif/else判断结构一样,case判断结构也可以用于多种可能情况下的分

支选择。语法:

case VAR in

var1) command1 ;;

var2) command2 ;;

var3) command3 ;;

...

*) command4 ;;

其原理为从上到下依次比较VAR和var1、var2、var3的值是否相等,如果匹配则执行其后面的命令语句,都不匹配,则匹配最后的默认*,执行其后面的默认命令。要注意的是,case判断结构中的var1、var2、var3等这些值只能是常量或正则表达式。

检测当前操作系统

[root@shell bin]# vim os_type.sh

#!/bin/bash

OS=`uname -s`

case "$OS" in

FreeBSD)

echo "this is FreeBSD";;

SunOS)

echo "this is Solaris";;

Darwin)

echo "this is Mac OSX";;

Linux)

echo "this is Linux";;

*)

echo "Failed to identify this OS";;

esac

[root@shell bin]# chmod +x os_type.sh

[root@shell bin]# os_type.sh

this is Linux

检测用户的输入中是否含有大写字母、小写字母或者数字,这里case匹配的值是正则表达式。

[root@shell bin]# vim detect_input.sh

#!/bin/bash

read -p "Please enter some words" INPUT

case $INPUT in

*[[:lower:]]*) echo "有小写字母!";;

*[[:upper:]]*) echo "有大写字母!";;

*[[:digit:]]*) echo "有数字!";;

*) echo "不知所云!";;

esac

[root@shell bin]# chmod +x detect_input.sh

[root@shell bin]# detect_input.sh

Please enter some words123

有数字!

当然这个不合理,只是一个很基础的应用,思绪并不严谨,不过没关系,主要是先学会这个怎么使用。

//把上边那个选颜色那个脚本,用case改写

[root@docker ~]# vim yanse.sh

#!/bin/bash

echo "您能输入的颜色有:红色、绿色、黄色、蓝色、紫色、青色、白色"

read -p "请输入你要选取的颜色:" COLOR

case "$COLOR" in

红色)

echo -e "\e[1;31m红色\e[0m";;

绿色)

echo -e "\e[1;32m绿色\e[0m";;

黄色)

echo -e "\e[1;33m黄色\e[0m";;

蓝色)

echo -e "\e[1;34m蓝色\e[0m";;

紫色)

echo -e "\e[1;35m紫色\e[0m";;

青色)

echo -e "\e[1;36m青色\e[0m";;

白色)

echo -e "\e[1;37m白色\e[0m";;

*)

echo "您的输入有误!";;

esac

测试:

1、创建2个数组,name组里分别有,toukui ,    jianbang,     xiongjia, yaodai  ,hushou,   hutui,xiezi

score组里分别有,77,45,22,99,65,84,66

注意,这里模拟的是,index索引下标分别对应的装备的分数。

[root@shell bin]# name=(toukui jianbang xiongjia yaodai

hushou hutui xiezi)

[root@shell bin]# echo ${name[@]}

toukui jianbang xiongjia yaodai hushou hutui xiezi

[root@shell bin]# score=(77 45 22 99 65 84 66)

[root@shell bin]# echo ${score[@]}

77 45 22 99 65 84 66

2、根据以上的数组,写一个脚本,可以做到查询对应的装备名字,得到对应的分数。

3、写一个装备查询系统,输入得分情况查看装备重铸品相。

如果装备类别小于等于30分,那么则输出,“渣渣!”

如果装备分数大于30并且小于等于65那么输出“大侠还需努力!”

如果装备分数大于65并且小于等于95则输出“大侠好棒棒!”

如果装备分数大于95分输出“谁与争锋!”

#!/bin/bash

read -p "请输入你要查询的装备类别:" INPUT

read -p "请输入装备的分数:" SCORE

case $INPUT in

toukui)

if [ $SCORE -le 30 ];then

echo "品相极品渣!"

elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then

echo "渣渣!"

elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then

echo "嗯,这才像个样!"

elif [ $SCORE -gt 95 ];then

echo "谁与争锋!"

else

echo "输入有误!"

fi;;

jianbang)

if [ $SCORE -le 30 ];then

echo "品相极品渣!"

elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then

echo "渣渣!"

elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then

echo "嗯,这才像个样!"

elif [ $SCORE -gt 95 ];then

echo "谁与争锋!"

else

echo "输入有误!"

fi;;

xiongjia)

if [ $SCORE -le 30 ];then

echo "品相极品渣!"

elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then

echo "渣渣!"

elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then

echo "嗯,这才像个样!"

elif [ $SCORE -gt 95 ];then

echo "谁与争锋!"

else

echo "输入有误!"

fi;;

yaodai)

if [ $SCORE -le 30 ];then

echo "品相极品渣!"

elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then

echo "渣渣!"

elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then

echo "嗯,这才像个样!"

elif [ $SCORE -gt 95 ];then

echo "谁与争锋!"

else

echo "输入有误!"

fi;;

*)

echo "没有这个装备!";;

esac

练习:

写一个脚本,要求如下

用户查询装备评分,输入得分情况,显示对装备的评价。

低于30分: 渣渣

大于等于30分小于60分:一般般

大于等于60分,小于90分:品相不错

大于等90分,小于95分:鬼斧神工

大于等95分,小于99分:谁与争锋

等于100分:万中无一

如果分数低于30分,请问用户,是否选择重铸,

如果选择重铸:显示请充值。

如果选择不重铸:退出

#!/bin/bash

read -p "请输入评分:" PINGFEN

JINE=10000

chongzhu=10

if [ $PINGFEN -lt 30 ];then

echo "品相不行啊?"

read -p "渣渣,是否选择重铸?Y/N。" YN

if [ $YN == Y ];then

if [ $JINE -ge $chongzhu ];then

read -p "抱歉,您的余额为$JINE,请充值:" CHONGZHI

fi

elif [ $YN == N ];then

echo "拜拜,穷屌丝"

else

echo "输入有误!"

fi

elif [ $PINGFEN -ge 30 -a $PINGFEN -lt 60 ];then

echo "一般般"

elif [ $PINGFEN -ge 60 -a $PINGFEN -lt 90 ];then

echo "品相还行!"

elif [ $PINGFEN -ge 90 -a $PINGFEN -lt 95 ];then

echo "鬼斧神工!"

elif [ $PINGFEN -ge 95 -a $PINGFEN -lt 99 ];then

echo "谁与争锋!"

elif [ $PINGFEN -eq 100 ];then

echo "万中无一!"

else

echo "输入有误!"

fi

3、function功能

函数可以在 shell script 当中做出一个类似自订执行指令的东西,最大的功能是, 可以简化我们很多的程序码。如果输出的内容都一样,那么我就可以使用 function 来简化了! function 的语法

function fname () {

command

}

fname 就是我们的自订的执行指令名称~而程序段就是我们要他执行的内容了。

要注意的是,因为 shell script 的执行方式是由上而下,由左而右, 因此在 shell script 当中的 function 的设置一定要在程序的最前面, 这样才能够在执行时被找到可用的程序段喔

思考:将上面的脚本简单化,用function功能。

#!/bin/bash

read -p "请输入你要查询的装备类别:" INPUT

read -p "请输入装备的分数:" SCORE

function fenshu () {

if [ $SCORE -le 30 ];then

echo "品相极品渣!"

elif [ $SCORE -gt 30 -a $SCORE -le 65 ];then

echo "渣渣!"

elif [ $SCORE -gt 65 -a $SCORE -le 95 ];then

echo "嗯,这才像个样!"

elif [ $SCORE -gt 95 ];then

echo "谁与争锋!"

else

echo "输入有误!"

fi

}

function chongzhu () {

read -p "请问是否选择重铸!Y/N" YN

if [ $YN == Y ];then

read -p "好的,用户选择重铸"

elif [ $YN == N ];then

echo "用户不重铸,886!"

else

echo "输入有误!"

fi

}

case $INPUT in

toukui)

fenshu;chongzhu;;

jianbang)

fenshu;chongzhu;;

xiongjia)

fenshu;chongzhu;;

*)

echo "没有这个装备";;

esac

4、while循环、until do done(不定循环)

shell中的循环主要有for、while、until、select几种

for 和 while常用

while循环

while [ condition ] //状态的判读

do

//循环的开始

command

done

//循环的结束

while 的中文是“当....时”,所以,这种方式说的是“当 condition 条件成立时,就进行循环,直到 condition 的条件不成立才停止”的意思

untile循环

until [ condition ]

do

command

done

这种方式恰恰与 while 相反,它说的是“当 condition 条件成立时,就终止循环, 否则就持续进行循环的程序段。

我们先用while举个小例子。

#!/bin/bash

while [ "${yn}" != "yes" ]

do

read -p "请输入'yes'退出: " yn

done

echo "退出成功!."

如果是until的话,那么判断条件相反。

#!/bin/bash

until [ "${yn}" == "yes" ]

do

read -p "请输入'yes'退出: " yn

done

echo "退出成功!."

好的知道了这个之后,再来看另外一个东西,先来看一个小脚本,请问$i等

于多少。

#!/bin/bash

i=0

let i=$i+1

echo $i

其实下边这个i已经是个新的变量了。格式还可以这样写

这个有什么用处那?用处就大了去了。比如说,我想知道1+2+3+4....+100 的值是多少。

怎么来写那?看一下这个脚本

#/bin/bash

s=0

i=0

while [ $i != 100 ]

do

let i+=1

let s=$s+$i

done

echo "1+2+3...+100等于$s"

[root@localhost ~]# ./1-100.sh

1+2+3...+100等于5050

这个时候,看一个例子,一个脚本,让用户输入密码,如果输入错误超过5次,就退出。这个时候有条件,当用户输入超过5次,就提示用户已经错误了5次,密码已经被锁,并退出。

vim denglu.sh

#!/bin/bash

i=1

while [ "$MIMA" != "123.com" -a $i -le 5 ]

do

let i+=1

read -p "请输入密码:" MIMA

done

if [ $i -le 5 ];then

echo "登录成功!"

else

echo "已经超过5次,退出!"

fi

[root@localhost ~]# ./denglu.sh

请输入密码:1

请输入密码:2

请输入密码:3

请输入密码:4

请输入密码:5

已经超过5次,退出!

[root@localhost ~]# ./denglu.sh

请输入密码:123.com

登录成功!

5、for循环

是最常见的循环结构。for循环是一种运行前测试语句,也就是在运行任何循环体之前先要判断循环条件是否成立,只有在条件成立的情况下才会运行循环体,否则将退出循环。每完成一次循环后,在进行下一次循环之前都会再次进行测试。

带列表的for循环

用于执行一定次数的循环(循环次数等于列表元素个数),其语法结构如下:

for var in con1 con2 con3

do

command

done

\1. 第一次循环时,的 $var 内容为 con1 ;

\2. 第二次循环时, $var 的内容为 con2 ;

\3. 第三次循环时, $var 的内容为 con3 ;

[root@shell bin]# vim fruit01.sh

#!/bin/bash

for FRUIT in apple orange banana pear

do

echo "$FRUIT is john's favorite!"

done

echo "no more fruits"

[root@shell bin]# chmod +x fruit01.sh

[root@shell bin]# fruit01.sh

apple is john's favorite!

orange is john's favorite!

banana is john's favorite!

pear is john's favorite!

no more fruits

为了便于修改,可以先定义变量,然后用变量替代列表

[root@shell bin]# vim fruit02.sh

#!/bin/bash

fruits="apple orange banana pear"

for FRUIT in ${fruits}

do

echo "$FRUIT is john's favorite!"

done

echo "no more fruits"

[root@shell bin]# chmod +x fruit02.sh

[root@shell bin]# fruit02.sh

apple is john's favorite!

orange is john's favorite!

banana is john's favorite!

pear is john's favorite!

no more fruits

列表也可以是数字:

[root@shell bin]# vim for_list01.sh

#!/bin/bash

for VAR in 1 2 3 4 5

do

echo "Loop $VAR times"

done

[root@shell bin]# chmod +x for_list01.sh

[root@shell bin]# for_list01.sh

Loop 1 times

Loop 2 times

Loop 3 times

Loop 4 times

Loop 5 times

数字多了以后,可以写成这样:

[root@shell bin]# cat for_list01.sh

#!/bin/bash

for VAR in {1..10}

do

echo "Loop $VAR times"

done

//表示从1 加到 100的所有正整数的和

[root@shell bin]# vim for_list03.sh

#!/bin/bash

sum=0

for i in `seq 1 100`

do

let "sum+=${i}"

done

echo "Total:${sum}"

//还可以使用“步长”计算1到100的奇数和

[root@shell bin]# vim for_list04.sh

#!/bin/bash

sum=0

for VAR in `seq 1 2 100`

#for VAR in $(seq 1 2 100)

do

let "sum+=${VAR}"

done

echo "Total: ${sum}"

[root@shell bin]# chmod +x for_list04.sh

[root@shell bin]# for_list04.sh

Total: 2500

6、类C的for循环

格式如下:

for ((expression1; expression2; expression3))

do

command

done

其中,expression1为初始化语句,一般用作变量定义和初始化;

expression2为判断表达式,用于测试表达式返回值并以此控制循环,返回值为真则循环继续,返回值为假则退出循环;expression3用于变量值修改,从而影响expression2的返回值,并以此影响循环行为。

[root@sunday-test shell-script]# cat 1.sh

#!/bin/bash

for ((i=1;i<=10;i++))

do

echo -n "$i "

done

[root@localhost ~]# ./1.sh

12345678910

练习1:倒数五秒

方法一:

#!/bin/bash

echo "准备倒数5秒:"

for i in $(seq 5 -1 1)

do

echo -en "$i";sleep 1

done

echo -e "开始"

练习2:批量添加用户

[root@localhost ~]# cat > users.txt <<EOF

\> zhangsan

\> lisi

\> wangwu

\> zhaoliu

\> EOF

[root@localhost ~]# cat useradd.sh

#!/bin/bash

for i in $(cat /root/users.txt)

do

useradd $i

echo "123.com" | passwd --stdin $i

done

总结:

1、while循环的特长是执行守护进程以及我们希望循环不退出持续执行的情况,用于频率小于一分钟循环处理,其他的while循环几乎都可以被for循环替代。

2、case语句可以替换if语句,一般在系统启动脚本传入少量固定规则字符串,用case语句。其他普通判断多用if语句。

3、if和for语句最常用,其次是while(守护进程),case(服务启动脚本)。

各个语句的应用场景:

条件表达式,简单的判断(文件是否存在,字符串是否为空等)。

if取值判断,不同值数量较少的情况。

for循环正常的循环处理,最常用!

while循环守护进程、无限循环(sleep)。

case服务启动脚本,菜单。

函数逻辑清晰,减少重复语句

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45313658/article/details/120372548

智能推荐

maven项目打包命令_maven打包命令-程序员宅基地

文章浏览阅读1w次。maven项目常用打包命令以及使用_maven打包命令

JAVA中URI转String_java.net.uri 转string-程序员宅基地

文章浏览阅读5.3k次。定义语法:public static URI create(String str)用例:URI uri = URI.create("http://java2s.com");_java.net.uri 转string

CentOS 7部署laravel_centos 7 laravel框架的.env-程序员宅基地

文章浏览阅读1.4k次。目录LNMP环境安装安装和配置 git安装 Composer安装 redisLaravel 项目安装拉取 github 上的 Laravel 项目代码安装依赖配置环境变量数据配置权限配置Nginx 配置elasticsearch0.安装JDK111.下载Elasticsearch72.下载完了解压压缩包3.移动目录4.新建一..._centos 7 laravel框架的.env

android 插入耳机 使用自身mic录音_苹果iPhone 12携最新系统强势登场,10款主流TWS耳机兼容性测试...-程序员宅基地

文章浏览阅读517次。北京时间2020年10月14日凌晨,苹果第二次秋季发布会成功落幕,会上发布了旗下搭载最新 iOS14 系统的 iPhone 12 系列智能手机和最新一代 HomePod mini 智能音箱,为了环保理念,苹果在此次发布会之后,官方商店在售 iPhone 系列所有产品均已不再标配 EarPods 有线耳机。因此购买了 iPhone 12 的小伙伴就需要自行配置耳机,而TWS真无线耳机凭借着..._android 耳机录音

Java - PAT - 1003. 我要通过!(20)_java实现1003-程序员宅基地

文章浏览阅读2.7k次。题目地址:1003. 我要通过!(20)1. 字符串中必须仅有P, A, T这三种字符,不可以包含其它字符;2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a, b, c 均或者是空字符串,或者是仅由字母 A 组成的字符串。_java实现1003

TCP通信丢包主要问题及具体问题分析_tcp的客户端发送报文给服务器,不产生丢包或网络阻塞,但是数据不一致是因为-程序员宅基地

文章浏览阅读7.3k次。今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠的传输,肯定也会存在掉包的情况。 如果通信中发现缺少数据或者丢包,那么,最大的可能在于程序发送的过程或者接收的过程出现问题。 例如服务器给客户端发大量数据,Send的频率很高,_tcp的客户端发送报文给服务器,不产生丢包或网络阻塞,但是数据不一致是因为

随便推点

c语言如何自定义运算公式,怎样用C语言编写数学公式 如何用C语言输入数学公式...-程序员宅基地

文章浏览阅读8k次。导航:网站首页 >怎样用C语言编写数学公式 如何用C语言输入数学公式怎样用C语言编写数学公式 如何用C语言输入数学公式相关问题:匿名网友:1、C语言有现场的常用数学函数,所在函数库为math.h、stdlib.h。函数名及解释:int abs(int i) 返回整型参数i的绝对值double cabs(struct complex znum) 返回复数znum的绝对值double fabs(..._c语言定义公式

算法竞赛入门经典第2版题解目录-程序员宅基地

文章浏览阅读522次。第3章 数组和字符串编号标题难度

Linux源码编译安装_linux源代码编译安装-程序员宅基地

文章浏览阅读4.7k次,点赞9次,收藏44次。文章目录1.获取安装包地址并下载2.解压安装包3../configure配置4.make编译5.make install 安装6.测试1.获取安装包地址并下载下载源代码安装包文件,以 APACHE 服务为例,我们需要进入https://httpd.apache.org/找到httpd的软件包。如果想要在虚拟机中下载,则复制链接地址,然后使用 wget 链接地址 下载2.解压安装包使用 tar xvf 压缩包名字 将压缩包解压,解压后会在同级目录下出现一个以软件包为名字的文件夹,也可 -C 指_linux源代码编译安装

Java 对象转化为Map_java 撖寡情頧柒ap-程序员宅基地

文章浏览阅读3.9w次,点赞8次,收藏29次。方式一: 利用FastJson 把对象转化为Map/** * * @MethodName: getUserInfoDataByUserId * @Description: 根据useId查询用户信息,封装成map key:属性名,value:属性值 * home.php?mod=space&uid=952169 userId 用户userId * @return */ public Map<String, String&_java 撖寡情頧柒ap

Vscode的相对路径读取问题及处理_解决vscode 相对路径-程序员宅基地

文章浏览阅读3.8w次,点赞43次,收藏96次。Vscode的相对路径读取问题及处理差异首先说一下vscode相对路径与一般编辑器的不同符号vscode一般的“./2.txt”相对于工作路径(.vscode文件夹所在的位置)相对于当前运行文件“2.txt”相对于工作路径相对于当前运行文件“/2.txt”相对于磁盘根目录相对于磁盘根目录问题处理案例:工作路径如下,执行文件为 readfi..._解决vscode 相对路径

MySQL 基本操作_alter table zhsq_yw_person drop birth-程序员宅基地

文章浏览阅读922次。MySQL_alter table zhsq_yw_person drop birth