Shell编程
一 shell简介
javascript 浏览器脚本语言
Java
shell Linux脚本语言
lua redis
PL/SQL MYSQL
1.1 什么是shell
shell 俗称叫做壳,计算机的壳层,和内核是相对的,用于和用户交互,接收用户指令,调用相应的程序。
因此,把shell分为2大类
1.1、图形界面shell(Graphical User Interface shell 即 GUI shell)
也就是用户使用GUI和计算机核交互的shell,比如Windows下使用最广泛的Windows Explorer(Windows资源管理器),Linux下的X Window,以及各种更强大的CDE、GNOME、KDE、 XFCE。他们都是GUI Shell。
1.2、命令行式shell(Command Line Interface shell ,即CLI shell)
也就是通过命令行和计算机交互的shell。 Windows NT 系统下有 cmd.exe(命令提示字符)和近年来微软大力推广的 Windows PowerShell。 Linux下有bash / sh / ksh / csh/zsh等 一般情况下,习惯把命令行shell(CLI shell)直接称做shell。
根据交互方式的不一样,命令行式shell(CLI shell),又分为交互式shell和非交互式shell:
A 交互式shell
交互式模式就是shell等待你的输入,并且执行你提交的命令,然后马上给你反馈。这种也是我们大多数时候使用的。
B非交互式shell
非交互式shell,就是把shell放在写在一个文件里面,执行的时候,不与用户交互,从前往后依次执行,执行到文件结尾时,shell也就终止了。
我们今天搞的就是 非交互式shell。也就是说 我们需要写一个文件,将shell的指令写到文件中然后让这个文件执行。
1.2 shell的分类
A bash
Bourne Again Shell 用来替代Bourne shell,也是目前大多数Linux系统默认的shell。
B sh
Bourne Shell 是一个比较老的shell,目前已经被/bin/bash所取代,在很多linux系统上,sh已经是一个指向bash的链接了。
C csh/tcsh
shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,tcsh是增强版本的csh,目前csh已经很少使用了。
D ksh
最早,bash交互体验很好,csh作为非交互式使用很爽,ksh就吸取了2者的优点。
E zsh
zsh本身是不兼容bash的,但是他可以使用仿真模式(emulation mode)来模拟bash等,基本可以实现兼容。 在终端中使用shell,基本上只是调用各种命令,比如:curl cat ls等等,基本不会使用到zsh的编程,所以终端中使用zsh是可以的。但是在写shell脚本的时候,需要考虑兼容性,最主流的还是bash shell
二 shell编程
2.1 shell的hello world
打开虚拟机 使用xshell连接
创建一个文件夹 mkdir /home/myshell
移动到这个文件夹 cd /home/myshell
创建一个shell脚本文件 (我们玩的是 非交互式shell 所以需要写脚本)
shell脚本文件 可以不添加后缀 .sh
vim hello.sh
接着在里面边写shell命令
#!/bin/bash
#这是注释 你好 世界
echo "你好 世界"
echo '你好 世界哈哈哈'
echo 你好世界哈哈哈哈哈哈
保存退出 :wq
执行shell : ./hello.sh
此时发现有问题
[root@localhost myshell]# ./hello.sh
bash: ./hello.sh: Permission denied
[root@localhost myshell]# ll
total 4
-rw-r--r--. 1 root root 134 Dec 23 14:22 hello.sh
此时提示没有权限 是因为我们的shell脚本要执行 需要X的可执行权限
所以我们需要给脚本添加 执行权限后再去执行: chmod u+x hello.sh
执行shell : ./hello.sh
注意:
#! : 是一个特殊的标记,表明使用啥解释器来执行,比如这里使用了:/bin/bash 来执行这个脚本。
# : 只用一个#,就是注释 echo:输出 我们把上面的脚本保存成一个文件,
s1.sh 后面的这个sh是shell脚本的扩展名
2.2 shell中的变量
在shell中编写内容
#!/bin/bash
#定义变量
name="张三"
age=18
#使用变量
echo "你好${name} ${age} 欢迎来带德莱联盟 "
echo "你好 $name 欢迎来到德莱联盟 "
echo '你好 $name 欢迎来到德莱联盟 '
echo 你好 $name 欢迎来到德莱联盟
# 加不加大括号 取决于你的环境 例如 echo hello${name}huanyinglaidaodelailianmeng
#给变量重新赋值
name="李四"
echo "你好${name} 欢迎来带德莱联盟 "
#清除变量
unset name
echo "你好${name} 欢迎来带德莱联盟 "
等号两边不能有空格!!!特别要注意,非常容易写错
命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
不能使用标点符号。不能使用bash里的关键字。
2.3 shell中的输入和输出
输入:read -p 提示水印 -t 时间限定 -n 字符个数 -s文本加密
输出:echo -e 让echo处理特殊符号
#!/bin/bash
read -p "请输入账号" username
read -s -t 10 -n 16 -p "请10s之内输入密码:" password
echo -e "您的账号 \033[5m ${username} \033[0m "
echo -e "您的账号 \033[5m ${password} \033[0m "
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m – \33[37m 设置前景色
\33[40m – \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
2.4 参数传递 位置参数
我们可以在执行 Shell 脚本时,向脚本传递参数,脚本内获取参数的格式为:$n。
n 代表一个数字,1 为执行脚本的第一个参数,2 为执行脚本的第二个参数
还有几个特殊字符用来处理参数
$# 传递到脚本的参数个数 $* 以一个单字符串显示所有向脚本传递的参数。
如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$ 脚本运行的当前进程ID号 $! 后台运行的最后一个进程的ID号
$@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。
如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$? 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。
#!/bin/bash
echo "获取位置参数的第一个参数 ${1} "
echo "获取位置参数的第四个参数 ${4} "
echo "获取所有位置参数的个数: $# "
echo "获取所有位置参: $* "
echo "获取所有位置参: $@ "
echo "脚本运行的当前进程ID号: $$ "
echo "后台运行的最后一个进程的ID号: $! "
echo "显示最后命令的退出状态: $? "
此时我们运行这个脚本
[root@localhost myshell]# ./hello.sh a b c e d f g h i j k l m n
获取位置参数的第一个参数 a
获取位置参数的第一个参数 e
获取所有位置参数的个数: 14
获取所有位置参: a b c e d f g h i j k l m n
获取所有位置参: a b c e d f g h i j k l m n
脚本运行的当前进程ID号: 1353
后台运行的最后一个进程的ID号:
显示最后命令的退出状态: 0
2.5 重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。
一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。
命令作用
command > file将输出重定向到 file。
command < file将输入重定向到 file。
command >> file将输出以追加的方式重定向到 file。
n > file将文件描述符为 n 的文件重定向到 file。
n >> file将文件描述符为 n 的文件以追加的方式重定向到 file。
n >& m将输出文件 m 和 n 合并。
n <& m将输入文件 m 和 n 合并。
<< tag将开始标记 tag 和结束标记 tag 之间的内容作为输入。
需要注意的是文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。
#!/bin/bash
#本来这句代码会将内容输出到 终端 此时我们可以重定向到 文件
echo "你好 我是森林女神" > aaa.txt
echo "你好 我是回声" >> aaa.txt
#将 内容 添加到 变量中
read a <<EOF
"你好 林女神"
EOF
echo $a >> aaa.txt
cat < hello.sh >> aaa.txt
ech "你好 肯定会出错" 2>>aaa.txt
综合练习:实现一个压缩的脚本 并删除源文件 没有压缩成功记录错误信息 不删除源文件
#!/bin/bash
tar -zcvf $1.tar.gz ${2} 2>>aaa.txt && rm -rf ${2}
2.6 shell中的if判断
if [判断条件1]
then command1
elif [判断条件2]
then
else command
fi
其中的"=="两边都有空格,不能省略,否则结果不正确
[ -f "s1.sh" ]判断文件是否存在 [ -d "s1.sh" ]判断目录是否存在
#!/bin/bash
read -p "请输入0 1 2 编号" no
if [ $no == 0 ]
then
echo "秀啊"
elif [ $no == 1 ]
then
echo "嗨呀"
elif [ $no == 2 ]
then
echo "真假?"
else
echo "行啊?"
fi
2.7 shell中的for循环
三 软件安装
3.1 JDK安装
查看JDK是否安装:yum list installed | grep jdk
如果安装了则卸载: yum -y remove 对应JDK版本
查看JDK版本列表:yum search java | grep -i --color jdk
选择版本安装:yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
查看java版本:java -version
查看环境变量:echo $JAVA_HOME
配置环境变量:vim /etc/profile (G o)
# set java environment
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.345.b01-1.el7_9.x86_64
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME CLASSPATH PATH
更新环境变量:source /etc/profile
3.2 安装tomcat
安装tomcat
在home下创建一个文件夹tomcat8: mkdir /home/tomcat8
移动到这个目录: cd /home/tomcat8
下载tomat压缩包: wget https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.73/bin/apache-tomcat-8.5.73.tar.gz
解压:tar -zxvf apache-tomcat-8.5.58.tar.gz
到tomcat的bin目录启动tomcat: ./startup.sh
在浏览器访问tomcat : http://192.168.11.130:8080
我们发现 每次启动maomi 都需要到其bin目录下才行 所以我们配置一个tomcat的启动脚本
配置tomcat 通过service启动的shell脚本
添加tomcat脚本: vim /etc/init.d/tomcat
#!/bin/bash
CATALINA_HOME=/home/apache-tomcat-8.5.82
case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;;
stop)
sh $CATALINA_HOME/bin/shutdown.sh
;;
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;;
*)
echo 'please use : tomcat {start | stop | restart}'
;;
esac
exit 0
移动到 init.d下 : cd /etc/init.d
添加权限:chmod 755 tomcat
3.3 boot项目 部署
1 maven 中 添加编译插件 放到admin项目中
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.aaa.haha.App</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
2 修改配置文件 application.properties的配置链接
打开数据库的联机访问
>show databases;
>use mysql;
>update user set password=password('123456') where user='root';
>update user set host='%' where host='127.0.0.1';
>flush privileges;
>exit;
3 打包: maven 有一个命令 :package
4 最后运行 java -jar xxxx.jar
作业: 阿里工具 toolkit
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118001.html