Java最新小白必看--Shell脚本基础及应用!,java开发面试常问到的问题最新

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

二、判断语句

=====================================================================

if语句


**1、if语句实例

shell里,(())表示比较大小

if 语法格式为:

if 表达式;then

表达式

else

表达式

fi**

if语句判断数字大小:

[root@docker1 ~]# cat c.sh

#! /bin/bash

NUM1=100

NUM2=200

if (($NUM1 > $NUM2));then

echo “This $NUM1 great $NUM2”

else

echo “This $NUM1 little $NUM2”

fi

[root@docker1 ~]# sh c.sh

This 100 little 200

  • 逻辑运算符:

-f 判断文件是否存在

-d 判断目录是否存在

-eq 等于

-ne 不等

-lt 小于

-gt 大于

-le 小于等于

-ge 大于等于

-a 双方都成立,逻辑表达式

-o 单方成立

-z 空字符串

实例: 1)判断一个目录是否存在 [root@docker1 ~]# cat d.sh

#! /bin/bash

判断文件是否存在

DIR=/data/20200522

if [ ! -d /data/$DIR ]; then

mkdir -p /data/$DIR

echo -e “\033[32mThis $DIR is create success!\033[0m”

else

echo -e “\033[32mThis $DIR is already exist,Please exit.\033[0m”

fi

[root@docker1 ~]# sh d.sh

This /data/20200522 is already exist,Please exit.

2)判断一个文件是否存在

[root@docker1 shell]# cat a.sh

#! /bin/bash

FILE=/tmp/20200222.txt

if [ ! -f $FILE ];then

echo “OK” >> $FILE

else

cat $FILE

fi

[root@docker1 shell]# sh a.sh

[root@docker1 shell]# sh a.sh

OK

3)多个条件测试判断

[root@docker1 shell]# cat b.sh

#!/bin/bash

score=$1

if [ -z $1 ];then

echo “Please input your score{80|90|100}”

exit

fi

if [ $score -gt 85 ];then

echo “best”

elif [ $score -gt 75 ];then

echo “good”

elif [ $score -gt 60 ];then

echo “pass”

else

echo “no pass”

fi

[root@docker1 shell]# sh b.sh

Please input your score{80|90|100}

[root@docker1 shell]# sh b.sh 60

no pass

[root@docker1 shell]# sh b.sh 100

best

if语句实战


https://blog.csdn.net/qq_45714272/article/details/106296310

https://blog.csdn.net/qq_45714272/article/details/106299071

三、循环语句

=====================================================================

for循环


1、打印1到15的和利用for循环

[root@a ~]# cat a.sh

#! /bin/bash

for i in seq 15

do

echo “the number is $i”

done

2、查看脚本运行过程

[root@a ~]# sh -x b.sh

3、打印1到100的和

[root@a ~]# cat b.sh

#! /bin/bash

j=0

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

do

j=expr $i + $j

done

echo $j

For循环企业实例

1、打印当前目录所有sh结尾的文件并打包

[root@a ~]# cat c.sh

#! /bin/bash

for i in find . -maxdepth 1 -name "*.sh"

do

tar -czvf $i.tgz $i

done

[root@a ~]# ls

anaconda-ks.cfg a.sh a.sh.tgz b.sh b.sh.tgz c.sh c.sh.tgz

解压:

[root@a ~]# cat c.sh

#! /bin/bash

for i in find . -maxdepth 1 -name "*.sh"

do

tar -czvf $i.tgz $i

done

[root@a ~]# sh c.sh

./a.sh

./b.sh

./c.sh

[root@a ~]# cd /tmp/test/

[root@a test]# ls

a.sh b.sh c.sh

5、远程主机批量传输文件

传输单个文件

[root@a test]# cat auto_scp

#! /bin/bash

auto scp files for client

by 20200524 caq

for i in echo 175.24.20.189

do

scp -r /tmp/test root@$i:/root

done

[root@a test]# sh auto_scp

root@175.24.20.189’s password:

a.sh 100% 64 1.2KB/s 00:00

b.sh 100% 76 1.4KB/s 00:00

c.sh 100% 89 1.6KB/s 00:00

auto_scp 100% 131 2.4KB/s 00:00

传输多个文件

[root@a test]# cat auto_scp

#! /bin/bash

auto scp files for client

by 20200524 caq

FILES=$*

if [ -z $* ];then

echo “input your patameter!{files|dir|…}”

exit

fi

for i in echo 175.24.20.189

do

scp -r F I L E S r o o t @ FILES root@ FILESroot@i:/root/

done

[root@a test]# sh auto_scp /a1 /a2

root@175.24.20.189’s password:

[root@VM_0_12_centos ~]# ls

a1 a2 test

免密登录

[root@a test]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:l+BheWrW/7HYGue2TlkGWTPW+bstC19H1SIOAgAmJEM root@a

The key’s randomart image is:

±–[RSA 2048]----+

|*Eo… ++|

|.+ . . .+=|

| * o . + +|

| o B + . oo|

| S + . =|

| o . . * |

| + = =|

| @o=o|

| o+X+ |

±—[SHA256]-----+

[root@a .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@175.24.20.189

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keys

root@175.24.20.189’s password:

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘root@175.24.20.189’”

and check to make sure that only the key(s) you wanted were added.

[root@a .ssh]# ssh 175.24.20.189

Last login: Sun May 24 21:43:32 2020 from 123.162.210.87

while循环


While循环企业实例:

IP等信息在一个文件中进行批量传输:

[root@a shell]# cat c.sh

#! /bin/bash

#by 20200524

while read line

do

ip=echo $line |awk '{print $2}'

echo “scp -r /tmp/text.txt root@$ip:/tmp”

done < list.txt

列表信息为:

[root@a shell]# cat list.txt

1 192.168.1.1

2 192.168.1.2

3 192.168.1.3

4 192.168.1.4

实现打印文件内容中的部分内容,并进行操作

[root@a shell]# sh c.sh

scp -r /tmp/text.txt root@192.168.1.1:/tmp

scp -r /tmp/text.txt root@192.168.1.2:/tmp

scp -r /tmp/text.txt root@192.168.1.3:/tmp

scp -r /tmp/text.txt root@192.168.1.4:/tmp

until循环


Until循环

这个循环语句用的较少

还是通过一个实例来理解它吧!

[root@a shell]# cat f.sh

#! /bin/bash

a=10

until [[ a -lt 0 ]]

do

echo “$a”

((a–))

done

[root@a shell]# sh f.sh

10

9

8

7

6

5

4

3

2

1

0

四、选择语句

=====================================================================

case语句


1、case语句简单实例

case语句用来判断,下面这个实例打印了一个菜单列表

语法格式为:

case variable in

option )

cmd

;;

option )

cmd

;;

… )

cmd

;;

  • )

cmd

;;

esac

[root@a shell]# cat e.sh

#/bin/bash

case $1 in

apache )

echo “wait install apache server!”

;;

mysql )

echo “wait install mysql server!”

;;

php )

echo “wait install php server!”

;;

  • )

echo “input your install server name please!”

;;

esac

[root@a shell]# sh e.sh

input your install server name please!

[root@a shell]# sh e.sh mysql

wait install mysql server!

2、select选择语句和case语句结合使用

select一般用于选择菜单的创建,可以配合ps3来做菜单的打印输出信息。

[root@a shell]# cat e.sh

#/bin/bash

ps3=“select your menu:”

select i in “apache” “mysql” “php”

do

case $i in

apache )

echo “wait install apache server!”

;;

mysql )

echo “wait install mysql server!”

;;

php )

echo “wait install php server!”

;;

  • )

echo “input your install server name please!”

;;

esac

done

[root@a shell]# sh e.sh

  1. apache

  2. mysql

  3. php

#? 1

wait install apache server!

#? 2

wait install mysql server!

#? 3

wait install php server!

五、四剑客

====================================================================

grep


grep 多用作匹配

sed多用于修改

awk多用于打印特定位置字符

sed命令可以实现不打开文件的情况下对文件内容进行修改

sed的替换命令格式:s/A/B/g 或者知 s#A#B#g 或者 s_A_B_g#。

s 是替代命令. s/表达式/replacement/

空白用t替代。

g(GLOBAL)

g – 全部替代

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

Mybatis源码解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

t install mysql server!

#? 3

wait install php server!

五、四剑客

====================================================================

grep


grep 多用作匹配

sed多用于修改

awk多用于打印特定位置字符

sed命令可以实现不打开文件的情况下对文件内容进行修改

sed的替换命令格式:s/A/B/g 或者知 s#A#B#g 或者 s_A_B_g#。

s 是替代命令. s/表达式/replacement/

空白用t替代。

g(GLOBAL)

g – 全部替代

总结

我们总是喜欢瞻仰大厂的大神们,但实际上大神也不过凡人,与菜鸟程序员相比,也就多花了几分心思,如果你再不努力,差距也只会越来越大。实际上,作为程序员,丰富自己的知识储备,提升自己的知识深度和广度是很有必要的。

Mybatis源码解析

[外链图片转存中…(img-FLoUvvJY-1715432461964)]

[外链图片转存中…(img-dtCfEkxm-1715432461965)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!针对您的问题,我可以给出以下解答: Java JSch 是一个用于远程执行命令和传输文件的 Java 库,通过 JSch,我们可以在 Java 应用程序中连接到远程主机,并执行远程主机上的命令。 针对您的问题,如果您在使用 Java JSch 调用 shell 脚本时,脚本执行后立即退出,可能是因为您的 Java 程序没有等待 shell 脚本执行完毕就立即退出了。 为了解决这个问题,您可以在调用 shell 脚本的代码中,使用 `ChannelExec.setPty(true)` 方法启用伪终端模式,并使用 `ChannelExec.setCommand(command + ";echo finished")` 方法在 shell 脚本执行完毕后输出一个 "finished" 的标识符。然后您可以使用 `ChannelExec.getInputStream()` 方法获取 shell 脚本的输出流,并等待输出流中包含 "finished" 标识符,表示 shell 脚本已经执行完毕,然后再关闭连接。 以下是一个示例代码: ``` JSch jsch = new JSch(); Session session = jsch.getSession(username, host, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.connect(); ChannelExec channelExec = (ChannelExec) session.openChannel("exec"); channelExec.setPty(true); channelExec.setCommand(command + ";echo finished"); channelExec.setInputStream(null); channelExec.setErrStream(System.err); InputStream inputStream = channelExec.getInputStream(); channelExec.connect(); byte[] tmp = new byte[1024]; while (true) { while (inputStream.available() > 0) { int i = inputStream.read(tmp, 0, 1024); if (i < 0) break; System.out.print(new String(tmp, 0, i)); } if (channelExec.isClosed()) { if (inputStream.available() > 0) continue; System.out.println("exit-status: " + channelExec.getExitStatus()); break; } try { Thread.sleep(1000); } catch (Exception ee) {} } channelExec.disconnect(); session.disconnect(); ``` 希望这个解答能够帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值