echo $SHELL
用户环境变量 more .bash_profile
创建首行#$/bin/bath 第二行#写注释 后面写指令
记住加权限 chmod +x test.txt
执行sh helloShell.txt
. ./test.txt 时在同一个shell里面执行 使用pstree查看
aa=$((4+5)) bb=`expr4 + 5`
删除变量unset NAME readonly b=2声明静态变量,不能用unset
export 变量名 可以提升为全局变量,供其他shell使用
shift指令左移 $n $* 把所有参数看成整数(加引号作为一个整体) $@各个参数分区对待 $#代表所有参数的个数 $?是否执行成功
$$当前的进程号 $!最后一个进程放入后天使用
expr 3\10
text [ expression ]
-gt大于 -ge大于等于 -le小于等于 -lt小于 -ne 不等于
test -n str1 测试字符串是否不为空
test -z str1 测试字符串是否为空
test -d file 指定文件是否目录
test –e file 文件是否存在
test -f file 指定文件是否常规文件
test -x file 指定文件是否可执行
test -r file 指定文件是否可读
test -w file 指定文件是否可写
test -s file 文件的大小是否非0
test –b File 文件存在并且是块设备文件
test –c File 文件存在并且是字符设备文件
test –f File 文件存在并且是常规文件
test –g File 文件存在并且是设置了组ID
test –G File 文件存在并且属于有效组ID
test –h File 文件存在并且是一个符号链接(同-L)
test –k File 文件存在并且设置了sticky位
test –b File 文件存在并且是块设备文件
test –L File 文件存在并且是一个符号链接(同-h)
test –o File 文件存在并且属于有效用户ID
test –p File 文件存在并且是一个命名管道
test –s File 文件存在并且是一个套接字
流程控制 if/else
if [ 条件判断式 ] ; then
程序
fi
read -p(提示语句) -n(字符个数) -t(等待时间)
read -p "please input your name"
case $CMD in
start)
echo "starting"
;;
Stop)
echo "stoping"
;;
*)
echo "Usage: {start|stop} “
esac
for语句
for N in 1 2 3
do
echo $N
done
for N in {1..3}; do echo $N; done
for ((i = 0; i <= 5; i++))
do
echo "welcome $i times"
done
while循环
while expression
do
command
…
done
自定义函数
优先级:alias-》function-》built-in命令-》可执行文件(shell脚本)
脚本调试
sh -x script这将执行该脚本并显示所有变量的值。
sh -n script不执行脚本只是检查语法的模式,将返回所有语法错误。
sh –v script显示脚本内容
sed和awk
sed -n '2,3P' sed.txt 显示第二和第三行
sed –n ‘3/it/p’sed.txt
sed –e ‘s/it/edu360/g’ sed.txt 把sed.txt文件中的it替换为edu360,并输出
sed –i ‘s/it/edu360/g’ sed.txt 要想真正替换,需要使用-i参数
使用sed获取机器的ip地址
ifconfig eth0 | grep 'inet addr'| sed 's/^.*addr://g' | sed 's/ Bcast.*$//g'
awk获取当前机器的ip地址:
ifconfig eth0 | grep 'inet addr' | awk -F: '{print $2}' | awk '{print $1}'
定时器ctontab
eg:每周六、周日的 1 : 10运行一个find命令
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
二、镜像关防火墙
service iptables stop
或、/etc/init.d/iptable restart重启
chkconfig iptable -list/off
三、免密登录
ssh-keygen -t rsa
cd .ssh
1.Linux下生成密钥
ssh-keygen的命令手册,通过”man ssh-keygen“命令:
通过命令”ssh-keygen -t rsa“
生成之后会在用户的根目录生成一个 “.ssh”的文件夹
进入“.ssh”会生成以下几个文件
authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
如果希望ssh公钥生效需满足至少下面两个条件:
1) .ssh目录的权限必须是700
2) .ssh/authorized_keys文件权限必须是600
2.远程免密登录
原理图:
常用以下几种方法:
2.1 通过ssh-copy-id的方式
命令: ssh-copy-id -i ~/.ssh/id_rsa.put <romte_ip>
举例:
常见错误:
[root@test ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135
-bash: ssh-copy-id: command not found //提示命令不存在
解决办法:yum -y install openssh-clients
2.2 通过scp将内容写到对方的文件中
命令:scp -p ~/.ssh/id_rsa.pub root@<remote_ip>:/root/.ssh/authorized_keys
举例:
也可以分为两步操作:
$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key //将文件拷贝至远程服务器
$ cat ~/pub_key >>~/.ssh/authorized_keys //将内容追加到authorized_keys文件中, 不过要登录远程服务器来执行这条命令
2.3 通过Ansible实现批量免密
2.3.1 将需要做免密操作的机器hosts添加到/etc/ansible/hosts下:
[Avoid close]
192.168.91.132
192.168.91.133
192.168.91.134
2.3.2 执行命令进行免密操作
ansible <groupname> -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k
示例:
2.4 手工复制粘贴的方式
将本地id_rsa.pub文件的内容拷贝至远程服务器的~/.ssh/authorized_keys文件中