shell 脚本常用命令

9 篇文章 0 订阅
2 篇文章 0 订阅

1 概述

最近在部署项目,需要写自动安装部署脚本,对shell脚本并不是熟悉,这里记录下一些常用的命名,主要是对于配置文件的修改.
注意: 对于一些可变参数我们可以单独写在一个文件中,达到可配置的效果.
(将配置文件信息和初始化脚本放在同一个目录下)

2 shell常用命令

2.1读取当前文件目录
path=$(cd `dirname $0`;pwd)
2.2 sed命令的使用

使用sed命令修改配置文件中的参数

  • 配置文件 application.properties
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/tag
spring.datasource.username=postgres
spring.datasource.password=1234
  • 修改pg参数
# pg properties
sed -i "s/spring\.datasource\.username=.*/spring\.datasource\.username=${pg_user}/"  ${path}/application.properties
sed -i "s/spring\.datasource\.password=.*/spring\.datasource\.password=${pg_pw}/"  ${path}/application.properties
#sed -i "s!spring|.datasource|.url=.*|spring|.datasource|.url=${pg_url}!" ${path}/application.properties
sed -i "s/spring\.datasource\.url=.*/spring\.datasource\.url=jdbc:postgresql:\/\/${pg_host}:${pg_port}\/${pg_db}/"  ${path}/application.properties

2.3 修改hosts文件

修改host文件,需要把host和主机名加到/etc/hosts目录下,我们需要准备参数达到可配置

  1. 准配参数tag-server.config
hostname_1=hadoop001
ip_1=10.192.77.1

hostname_2=hadoop002
ip_2=10.192.77.2

hostname_3=hadoop003
ip_3=10.192.77.3
hostname_1=`sed '/^hostname_1=/!d;s/.*=//' $path/tag-server.config`
ip_1=`sed '/^ip_1=/!d;s/.*=//' $path/tag-server.config`

hostname_2=`sed '/^hostname_2=/!d;s/.*=//' $path/tag-server.config`
ip_2=`sed '/^ip_2=/!d;s/.*=//' $path/tag-server.config`

hostname_3=`sed '/^hostname_3=/!d;s/.*=//' $path/tag-server.config`
ip_3=`sed '/^ip_3=/!d;s/.*=//' $path/tag-server.config`

if grep -Fxq "${ip_1} ${hostname_1}" /etc/hosts
then
    echo 'Already configured'
else
   echo "${ip_1} ${hostname_1}" >> /etc/hosts
fi

if grep -Fxq "${ip_2} ${hostname_2}" /etc/hosts
then
    echo 'Already configured'
else
   echo "${ip_2} ${hostname_2}" >> /etc/hosts
fi

if grep -Fxq "${ip_3} ${hostname_3}" /etc/hosts
then
    echo 'Already configured'
else
   echo "${ip_3} ${hostname_3}" >> /etc/hosts
fi
2.4 ssh命令

经常需要远程到其他节点上执行一些shell命令,这时候就要用到ssh命令,举个例子,加入我现在在A机器上进行项目部署,但是需要使用到B机器上部署的大数据环境,那我就要在A机器上执行一些命令,例如创建Kafka Topic,Hbase建表等,这时候就要用到SSH命令.有些人该有个疑问了,那为什么不直接在B机器上创建好呢?

  1. 因为你是在A机器上进行项目部署,肯要要在启动A机器上启动,既然是一键部署,那你还要到B机器去执行命令就不能叫一键部署了吧
[root@hadoop /opt/tag/tag-0826]#ssh --help
unknown option -- -
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]
  • 参数说明
-l 指定登入用户
-p 设置端口号
-f 后台运行,并推荐加上 -n 参数
-n 将标准输入重定向到 /dev/null,防止读取标准输入。如果在后台运行ssh的话(-f选项),就需要这个选项。
-N 不执行远程命令,只做端口转发
-q 安静模式,忽略一切对话和错误提示
-T 禁用伪终端配置
-t (tty)为远程系统上的ssh进程分配一个伪tty(终端)。如果没有使用这个选项,当你在远程系统上运行某条命令的时候,
ssh不会为该进程分配tty(终端)。相反,ssh将会把远端进程的标准输入和标准输出附加到ssh会话上去,
这通常就是你所希望的(但并非总是如此)。
这个选项将强制ssh在远端系统上分配tty,这样那些需要tty的程序就能够正常运行。
-v verbose)显示与连接和传送有关的调试信息。如果命令运行不太正常的话,这个选项就会非常有用
  • 配置文件 tag-server.config
### ssh 端口
ssh_port=22

#### 当前服务器家目录
current_contents=/root/

##### cluster message(大数据服务器)
cluster_ip=10.192.130.2
cluster_name=hadoop
ip_port=10.192.130.2:2181,10.192.130.3:2181,10.192.130.4:2181

#replication_factor
replication_factor=3

#partitions
partitions=10 

topic=test

###### postgresql message
pg_host=10.192.137.20
pg_port=5432
pg_db=test
pg_user=postgres
pg_pw=1234
# 需要放在ssh到的那台机器
pgsql_path=/home/install/pg.sql 

##### elasticsearch message

#es.cluster
es_cluster=es-dev-6.5.4

#es es.host
es_host=10.192.137.2

#es port
es_port=9300

#es.restfulPort
es_restfulPort=9200

#es.search.max.day=30
es_search_max_day=30
  • 创建Kafka Topic
topic=`sed '/^topic=/!d;s/.*=//' $path/tag-server.config`
#集群信息
ip_port=`sed '/^ip_port=/!d;s/.*=//' $path/tag-server.config`

#replication_factor
replication_factor=`sed '/^replication_factor=/!d;s/.*=//' $path/tag-server.config`

#partitions
partitions=`sed '/^partitions=/!d;s/.*=//' $path/tag-server.config`

ssh ${cluster_name}@${cluster_ip} -p ${ssh_port} kafka-topics --create --zookeeper ${ip_port} --replication-factor ${replication_factor} --partitions --topic ${topic}
  • 执行pg脚本
pg_host=`sed '/^pg_host=/!d;s/.*=//' $path/tag-server.config`
pg_port=`sed '/^pg_port=/!d;s/.*=//' $path/tag-server.config`
pg_db=`sed '/^pg_db=/!d;s/.*=//' $path/tag-server.config`
pg_user=`sed '/^pg_user=/!d;s/.*=//' $path/tag-server.config`
pg_pw=`sed '/^pg_pw=/!d;s/.*=//' $path/tag-server.config`
pg_url=jdbc:postgresql:\/\/${pg_host}:${pg_port}/${pg_db}
pgsql_path=`sed '/^pgsql_path=/!d;s/.*=//' $path/tag-server.config`

ssh ${cluster_name}@${cluster_ip} -p ${ssh_port} "psql 'host=${pg_host} port=${pg_port} user=${pg_user} password=${pg_pw}' -c 'CREATE DATABASE '${pg_db}''"

ssh ${cluster_name}@${cluster_ip} -p ${ssh_port} "psql 'host=${pg_host} port=${pg_port} user=${pg_user} password=${pg_pw} dbname=${pg_db}' -f '${pgsql_path}'"
  • es配置信息
es_host=`sed '/^es_host=/!d;s/.*=//' $path/tag-server.config`
es_port=`sed '/^es_port=/!d;s/.*=//' $path/tag-server.config`
es_cluster=`sed '/^es_cluster=/!d;s/.*=//' $path/tag-server.config`
es_restfulPort=`sed '/^es_restfulPort=/!d;s/.*=//' $path/tag-server.config`
#es配置信息,数据主题使用
#es.cluster=es-dev-6.5.4
sed -i "s/es\.cluster=.*/es\.cluster=${es_cluster}/"  ${path}/application.properties
#es.host=10.192.77.223
sed -i "s/es\.host=.*/es\.host=${es_host}/"  ${path}/application.properties
#es.port=39300
sed -i "s/es\.port=.*/es\.port=${es_port}/"  ${path}/application.properties
#es restful请求端口,主题发布创建索引使用
#es.restfulPort=39200
sed -i "s/es\.restfulPort=.*/es\.restfulPort=${es_restfulPort}/"  ${path}/application.properties

scp

scp --help
unknown option -- -
usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
 参数如下:
-1  强制scp命令使用协议ssh1  
-2  强制scp命令使用协议ssh2  
-4  强制scp命令只使用IPv4寻址  
-6  强制scp命令只使用IPv6寻址  
-B  使用批处理模式(传输过程中不询问传输口令或短语)  
-C  允许压缩。(将-C标志传递给ssh,从而打开压缩功能)  
-p  保留原文件的修改时间,访问时间和访问权限。  
-q  不显示传输进度条。  
-r  递归复制整个目录。  
-v  详细方式显示输出。   
-c cipher  以cipher将数据传输进行加密,这个选项将直接传递给ssh。   
-F ssh_config  指定一个替代的ssh配置文件,此参数直接传递给ssh。  
-i identity_file  从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。    
-l limit  限定用户所能使用的带宽,以Kbit/s为单位。     
-o ssh_option  如果习惯于使用ssh_config(5)中的参数传递方式,   
-P port  注意是大写的P, port是指定数据传输用到的端口号   
-S program  指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。
     
  • 配置文件
#### ssh 端口
ssh_port=55555

#### 当前服务器家目录
current_contents=/root/

##### cluster message(大数据服务器)
cluster_ip=10.192.77.223
cluster_name=hik
# 大数据服务器用户家目录
cluster_contents=/home/hadoop/
  • 免密钥登录
#获取ssh port
ssh_port=`sed '/^ssh_port=/!d;s/.*=//' $path/tag-server.config`

#获取服务器用户名和密码
#cluster1_ip=10.192.77.223
#cluster_name=hik
cluster_name=`sed '/^cluster_name=/!d;s/.*=//' $path/tag-server.config`
cluster_ip=`sed '/^cluster_ip=/!d;s/.*=//' $path/tag-server.config`


# 免密码登录脚本,配置ssh信任

# 服务器用户家目录
cluster_contents=`sed '/^cluster_contents=/!d;s/.*=//' $path/tag-server.config`

#### 当前服务器家目录
current_contents=`sed '/^current_contents=/!d;s/.*=//' $path/tag-server.config`

ssh-keygen -t rsa
touch ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 644 ~/.ssh/authorized_keys
scp -P ${ssh_port} ${current_contents}.ssh/id_rsa.pub ${cluster_name}@${cluster_ip}:${cluster_contents}.ssh/authorized_keys
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值