一、shell概述:
什么是shell?
(1)一个编程语言;
(2)可执行的文件
(3)文件内容、linux命令组成
二、shell语法入门
1.写一个shell命令:
(1)文件名.sh结尾
(2)第一行:#!/bin/bash
2.权限:
(1)无权限:sh 文件名.sh
[root@hadoop100 shell]# sh ./wc.sh
word count
[root@hadoop100 shell]#cat ./wc.sh
#!/bin/bash
echo 'word count'
(2)给文件执行权限
[root@hadoop100 shell]# chmod u+x ./wc.sh
[root@hadoop100 shell]# ./wc.sh
word count
[root@hadoop100 shell]# ~/shell/wc.sh
word count
[root@hadoop100 shell]# sh ~/shell/wc.sh
word count
(3)debug
[root@hadoop100 shell]# sh -x ./wc.sh
+ echo 'word count'
word count
#!/bin/bash -x
echo 'word count'
3.定义变量(引用)
(1)定义变量的方式:前后不能用空格、变量名一般都是大写
(2)变量种类:shell中变量的数据类型都是string
1)静态:k="v"、k='v'、k=v
2)动态:k=`v`、v是变量且是系统自带的命令
(3)引用:$k、${k}(最好用次写法,后面可拼接)
[root@hadoop100 shell]# a=1
[root@hadoop100 shell]# echo $a
1
[root@hadoop100 shell]# b=2
[root@hadoop100 shell]# echo ${a}+${b}
1+2
4.shell脚本参数传递:(用meavn:num1=$1 num2=$2 java -classpath ./java01-1.0.jar(文件名) com.sygy.Test(项目名.类名) ${num1} ${num2))
(1)$n(参数排序)echo "传递一个参数:$n":
1)$#:count
2)$*/$@:字符串
3)$$:脚本运行时pid
(2)传递参数空格作为符号分隔符、参数本身带空格要加引号
5.数组:
(1)数组用()表示
(2)元素间用空格分隔
(3)取所有元素${数组名[@]}、元素个数在数组名前加#、下标从0开始
6.流程控制:$?->获取上一个程序运行的结果:成功0、失败非0
(1)分支:if else(condition:条件判断语法->[ condition ] 结果:非空true、空false
条件表达式:数值判断(-lt小于、-le小于等于、-eq等于、-ge大于等于、-gt大于、-ne不等于)、权限判断(-r、-w、-x)、文件判断(-f、-d、-e)*符号前后要有空格)
格式:if [ condition ];then name1="zs" if [ ${score} -gt 90 ];then
业务代码 name2="ls" echo "优秀"
else if[ ${name1} ] == ${name2}];then elif [ ${score} -ge 60 ];then
业务代码 echo "等于" echo "良"
else else
echo "不等于" echo "不及格"
fi
(2)循环:for、while、dowhile
格式:for el in item1 item2...item for((i=0;i<size;i++)) ()包装条件
do do
业务代码(echo "${num}") 业务代码
done done
i=1
while((${i}<=5))
do
echo "v is ${i}"(业务代码)
let i++
done
(3)总结:条件表达式不能用<>
while、for能用<>,不能用-lt、-gt...
若( )换为[ ]则应将<>换为-lt、-gt...([ ]->条件判断、( )->数值运算)
具体参考:https://blog.youkuaiyun.com/taiyang1987912/article/details/39551385?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
(4)字符串替换:将字符串内,->/
eg: str="linux01,linux02,linux03"
arr=(${str//,/ })
for linux in ${arr[@]}
do
echo ${linux}
donw
str.split(",")
7.awk:获取内容
(1)获取列:awk '{print $1} ->取第一列
(2)获取行:awk 'NR==1{print}' ->取第一行
8.sed:文本替换
(1)sed -i 's/a/dd/' 文件名 ->将a替换为dd(只替换每行第一次出现的a)
(2)全局替换:sed -i 's/a/dd/g'
(3)若内容中出现/则需要在内容/前面加\转译,否则要将原本/替换为#
Shell
最新推荐文章于 2025-05-29 10:31:31 发布