学习shell脚本时,总结出来的
1、如何将一个命令的结果赋值给一个变量
使用$() 将命令包括起来 或者使用``
localIP=$(ifconfig eth0 |awk '/inet /{print $2}’)
localIP=`ifconfig eth0 |awk '/inet /{print $2}'`
2、函数返回值
getLocalIP(){
localIP=$(ifconfig eth0 |awk '/inet /{print $2}')
localIP=${localIP:0:-2}
echo $localIP
}
IP=$(getLocalIP)
echo $IP
函数:如果是使用 function 定义,函数名与{}之间应该有空格
3、表达式
表达式计算
COUNT=`expr $COUNT + 1`
let COUNT+=1
4、seq 相关
`seq 9`
`seq 7 9`
`seq 1 2 9`
5、字符串去尾巴
字串去尾:
从右向左:最接近的一个匹配:
${变量%关键字}
从右向左:最远的一个匹配:
${变量%%关键字}
${i%.*} #将 aaa.xsl 中的.以后的都去掉
6、快捷键
ctrl +a :到该行命令的最前端
ctrl +e :到该行命令的最后端
ctrl +c :准备执行的命令撤销掉
ctrl + l :清屏
Tab :补齐
7、echo
-e : 扩展颜色属性
-n : 不换行
8 、重定向
> : 重定向 (只重定向正确的,无法重定向错误的)
>> : 追加
2> : 将错误信息进行重定向
2>> : 将错误信息进行追加
&>: 将正确、错误的信息都进行重定向
l :管道 (将管道前后进行组合)
& : 程序放后台运行
9、环境变量
test=aaa :等号两边没有空格
unset test :取消环境变量
export test=test1 :全局变量定义
${变量:-关键字} : 变量没有值将赋值初始化关键字,如:${X:-123}
10、预定义环境变量
一般配合 echo 使用
$? :判断上依据命令是否执行正确,执行成功返回0,非0表是不成功 可以用户条件判断
$0 : 当前执行脚本的名称
$$ : 当前进程号的PID
$# : 脚本位置参数的个数
$* : 变量输入的所有内容
wait :等待脚本结束后再执行下一个
& : 将程序放入后台执行
$! : 最后一个后台进程的进程号 kill $! 可杀死该进程
11、引号
“”:可以识别变量,将变量的值给出来
‘’:不可识别变量,屏蔽特殊符号,直接输出
``与$()等价: 将命令执行的输出结果赋予变量 ,相当于表达式的值
12、read 命令
-s 隐藏输入显示 ,通常用于密码输入
-t 定义输入失效事时间
-p 后面跟打印在控制台的提示信息
定义一个变量,需要执行脚本者进行手动输入
read -p "请输入用户名:" name
read -p "请输入密码:" -s pass
useradd "$name"
echo "$pass" | passwd --stdin "$name"
13、判断比较
字符串比较: 0为真 1为假 使用 help test 来查看参数
基本语法: 使用 echo $? 来判断比较的情况
是否为空: [ -z string ]
等于:[ string1 == string2 ]
不等于:[ string1 != string2 ]
注意:方括号前后与比较符号与字符串之间必需有至少一个空格,有变量名的需要注意变量名不要写错(写错会找到你怀疑人生)
整数值比较: 基本语法: [整数值1 操作符 整数值2] eg : [ 3 -le 2 ] [ 操作符 文件或目录 ]
14、条件组合
; 按顺序没有,都要执行
&& 顺序,前一条成功才执行后一条
|| 前面执行成功,后面不执行,前面不成功,执行后面
15、其他
tr -s :删除多余重复的字符串
cut : 过滤数据 (列) -d : 以“:”进行分割 -f1 表示取第一个列。f2 第二列
grep :过滤行
条件判断: 注意 条件0表示真,非0表示假 , 如果if than 在同一行,则条件和 than 之间必须加分号;如果不在同一行,则不需要 单条件
16、字符串
替换
替换第一个旧字符
${变量/旧字符/新字符}
替换所有旧字符
${变量//旧字符/新字符}
echo ${A//x/a}
注意:(变量本身没有变换,只是当前运算的变化了)
截取
${变量:起始位置:长度}
${#变量} #统计变量长度
${phone:4:-2} #截取中间: 从第四位(从第五位开始显示),并且去掉后两位
位置编号从0开始,只有位置将从该位置一直到末尾
掐头去尾
${变量#*关键字} #从左向右:最接近的一个匹配,匹配第一个
${变量##关键字} #从左向右:最远的一个匹配
echo ${A##:*}
${变量%关键字} # 从右向左:最接近的一个匹配
${变量%%关键字} #从右向左:最远的一个匹配
echo ${A%:*}
17、正则表达式
拓展正则符号 grep -E 兼容正则符号 grep -P 定位符
send命令不使用-i 选项,源文件不被修改
默认只修改第一个
g :全部替换
数字 :指定每行第几个
& :无需输入,就前面的旧字符
S:前面加数字:定位行
列过滤
awk : 可进行列过滤
-F:默认以空格或者以tab健为分割,改参数可进行指定分割符
awk -F: '{print $1,$3}' /etc/passwd #以:进行分割
|