Shell基础
一.变量
a=1 b=abc c="abcd efg" 给变量赋值的时候等号两边不能有空格,变量值有空格的话需要用引号,双引号支持转义
echo $a 或 ${a} 或 "$a" echo使用来输出内容,执行变量,$开头的变量会被自动替换
echo $((${a}+1)) 双括号是算数运算符,花括号是明确被引用的变量,如果变量被写成$a+1,shell会把a+1当成一个变量.
echo ${#c} #可以计算出该变量的长度,后面也可以跟数组
echo $a$b$c 字符串拼接
echo ${c:0:4} 截取字符串,取字符串的前4位
引用未被定义的变量,程序不会报错,返回空.
预定义变量
echo $PWD USER HOME PATH 提前设置好的系统变量,,,,HOME 返回根目录,USER返回当前用户等
数组
array=(1 2 3 4 5 6) 定义数组使用小括号,数组内的值使用空格隔开;
echo ${array[0]} 取数组内的第一个值
witch 1.sh 回去当前环境变量下查找1.sh
a=`ls` echo $a 会在当前目录执行ls 并将ls执行结果返回的目录赋值给变量a ,使用``
a=array(`ls`) echo ${a[0]} 会在当前目录执行ls, 并将结果保存值数组中,按照空格隔开
``反引号 $() 可以执行括号内的操作,与 ``类似, 但是支持嵌套
-e 执行转义符 否则会讲转义符当作普通的字符串来执行
(()) 数字运算符
$? 返回程序执行结果,成功返回0 失败返回1
echo不支持小数,
awk是内置函数,用来读取管道输入,BEGIN的意义就是,不用读取数据,让程序执行完后面的操作就直接退出就好来(浮点数的计算使用awk)
-F 用来匹配字符
字符串操作:掐头# ## 去尾% %% 替换/ // 单个符号和双个符号的区别是贪婪匹配,如下显示
算数运算符: 逻辑判断:
[ 2 -eq 2 ] 等于 ((2=2)) -a 相当与&& -o 相当于 ||
[ 2 -ne 1 ] 不等与 ((2!=1))
[ 2 -gt 1 ] 大于
[ 2 -ge 1 ] 大于等于
[ 2 -lt 3 ] 小于
[ 2 -le 3 ] 小于等于
字符串比较:
[ string1 = string2 ] 两个字符串相等则结果返回为真
[ string1 != string2 ]两个字符串不想等则结果为真
[ -n string2 ] 字符串不为空,则结果为真
[ -z string2 ] 字符串为空,则结果为真
[[ "xxxxx" == x* ]] *表达式中表示0或多个字符
[[ xxxx == x??? ]] ?表达式中表示一个字符
内置判断:
-e file 判断文件是否存在
-d file 判断文件是否是目录
-f file 判断文件是否是普通文件
-r file 如果文件可读
-s file 如果文件长度不为0
-w file 如果文件可写
-x file 如果文件可执行
条件判断
条件:if 分支 select case
循环:for while until
break continue
也可以使用&&和||来代替if &&条件成立执行后面的操作 ||条件失败执行后面的操作 $f加“” 防止为空时报错
循环
字符串默认会按照空格隔开拆分
使用vi进入文件, 按i进入编辑模式,编辑完成之后 按esc, :wq! w是保存 q是退出 !是强制
使用touch创建文件,使用mkdir 创建文件目录,使用chmod更改文件操作权限
chmod abc file 其中啊a b c各代表一个数字,表示User、Group、及Other的权限:
r=4,w=2,x=1 chmod ug=rwx,o=x file 和 chmod 771 file user和group权限是7,other权限是可执行
使用vim进入脚本编辑,按dd可进入可删除状态,或按住a再删除,按i进入编辑啊状态,esc退出编辑状态,
cat 文件名,可以执行打开文件的操作; sh file.sh可以执行file.sh脚本,或者进入文件所在目录执行./file.sh
退出控制:
return 函数返回
exit 终止进程脚本
break 退出当前循环
continue 跳过失败继续循环
Linux文件上传
scp d:/1.txt user@ip:服务器路径
scp d:/1.txt zhang@192.168.199.198:/home/zhang/test
Linux文件下载
# 将1.txt拷贝到 D盘
scp zhang@192.168.199.198:/home/zhang/test/1.txt d:/
Linux文件打包压缩
tar -cvf log.tar 1.log 仅打包,不压缩!
# 如果加上 z 表示以.tar.gz或tgz来代表gzip压缩过的tar包
tar -zcvf log.tar.gz 2.log 打包后,以 gzip 压缩
# 如果加上 j 表示以.tar.bz2来代表bzip2压缩过的tar包
tar -jcvf log.tar.bz2 3.log 打包后,以 bzip2 压缩
Linux文件解压
tar -xvf log.tar
tar -zxvf log.tar.gz
tar -jxvf log.tar.bz2
一、本地文件复制到192.168.13.161服务器的方法(此时你操作的界面是本地的命令窗口)
命令格式为:sudo scp 本地目录/filenameA root@服务器ip:服务器目录/filenameB
$ sudo scp /etc/ganglia/gmond.conf root@192.168.13.161:/etc/ganglia/gmond.conf
之后需要输入192.168.13.161服务器root用户的密码,如果是其他用户,只需要把出现root的地方换上自己拥有的用户权限的用户名即可。
二、192.168.13.161服务器上的文件复制到192.168.13.162客户端(此时你操作的界面在192.168.13.161 的命令窗口)
命令格式为:sudo scp 本地目录/filenameA root@客户端ip:客户端目录/filenameB
$ sudo scp /etc/ganglia/gmond.conf root@192.168.13.162:/etc/ganglia/gmond.conf
阿里云服务上解压zip文件方法
yum install unzip -y
unzip 压缩包.zip