首页 > 代码库 > Shell脚本练习
Shell脚本练习
#!/bin/bash
echo "当前日期时间为:"`date`
echo "Hello World !"
#使用变量:可以用单引号,也可以用双引号
your_name="Wang"
echo $your_name
echo ${your_name}
str=‘ShellStudy‘
echo ${str}
#只读变量:不能改变它的值
myUrl="www.wnn1.com"
readonly myUrl
echo "My URL is ${myUrl}"
myUrl="www.wnn.com"
#删除变量:只读变量不能删除
unset myUrl
echo "My URL is ${myUrl}"
#获取字符串长度
echo "str字符串为ShellStudy,字符串长度为:" ${#str}
#提取子字符串:以下实例从字符串第 2 个字符开始截取 4 个字符
string="wangniannian"
echo "截取字符串"${string:1:4}
#查找子字符串
echo `expr index "$string" w`
#for循环
for skill in Ada Coffe Action Java;do
echo "I am good at ${skill}Script"
done
#数组
array_name=(wang love zhu)
#读取数组
echo "数组的第二个元素为:"${array_name[1]}
#使用@可以获取数组中的所有元素
echo "数组的所有元素为:"${array_name[@]}
#取得数组元素的个数
length=${#array_name[@]}
echo "数组的元素个数为:"${length}
#取得数组单个元素的长度
lengthn=${#array_name[2]}
echo "数组的第三个元素的长度为:"${lengthn}
#Shell 传递参数
echo "执行的文件名为:$0"
echo "第一个参数为:$1"
echo "第二个参数为:$2"
#Shell 运算符:原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。
#expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
#算数运算符
val=`expr 2 + 2`
echo "2+2=$val"
a=10
echo "a的值是${a}"
b=20
echo "b的值是${b}"
val_jia=`expr $a + $b`
echo "a+b= $val_jia"
val_jian=`expr $a + $b`
echo "a-b= $val_jian"
# *前面需要有\需要转义
val_cheng=`expr $a \* $b`
echo "a*b=$val_cheng"
val_chu=`expr $b / $a`
echo "b/a=$val_chu"
val_yu=`expr $b % $a`
echo "b%a=$val_yu"
if [ $a == $b ]
then echo "a等于b"
fi
if [ $a != $b ]
then echo "a不等于b"
fi
#关系运算符
#-eq 检测两个数是否相等,相等返回true
if [ $a -eq $b ]
then echo "$a -eq $b : a等于b"
else echo "$a -eq $b : a不等于b"
fi
#ne 检测两个数是否相等,不相等返回true
if [ $a -ne $b ]
then echo "$a -ne $b: a不等于b"
else echo "$a -ne $b: a等于b"
fi
#gt 检测左边的数是否大于右边的,如果是,返回true
if [ $a -gt $b ]
then echo "$a -gt $b: a大于b"
else echo "$a -gt $b: a不大于b"
fi
#lt 检测左边的数是否小于右边的,如果是,返回true
if [ $a -lt $b ]
then echo "$a -lt $b: a小于b"
else echo "$a -lt $b: a不小于b"
fi
#ge 检测左边的数是否大于等于右边的,如果是,返回true
if [ $a -ge $b ]
then echo "$a -ge $b: a大于或等于b"
else echo "$a -ge $b: a小于b"
fi
#le 检测左边的数是否小于等于右边的,如果是,返回true
if [ $a -le $b ]
then echo "$a -le $b: a小于或等于b"
else echo "$a -le $b: a大于b"
fi
#布尔运算符
#逻辑运算符
#字符串运算符
#文件测试运算符
#Shell 输入、输出重定向
#/dev/null 文件:如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:
#/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。
#输出重定向
who > users
#追加用>>
echo "菜鸟教程:www.runoob.com" >>users
#输入重定向
wc -l users
#Shell函数
demoFun(){
echo "这是我的第一个shell函数!"
}
echo "---函数开始执行---"
demoFun
echo "---函数执行完毕---"
#Shell 流程控制
if [ $(ps -ef | grep -c "ssh") -gt 1 ]
then echo "true"
else echo "false"
fi
#grep命令
#查找包含wang文本的所有行并打印在屏幕上
grep "wang" /Users/wangniannian/test.sh
#不区分大小写的查找wang文本的所有行并打印在屏幕上
grep -i "wang" /Users/wangniannian/test.sh
#查找包含wang文本的所有行并将匹配行的总数打印在屏幕上
grep -c "wang" /Users/wangniannian/test.sh
#查找包含wang文本的所有行并打印在屏幕上同时显示行号
grep -n "wang" /Users/wangniannian/test.sh
#查找不包含wang文本的所有行并打印仔屏幕上
grep -v "wang" /Users/wangniannian/test.sh
#awk
#用法一:awk ‘{[pattern] action}‘ {filenames} # 行匹配语句 awk ‘‘ 只能用单引号
#每行按空格或TAB分割,输出文本中的1、4项
awk ‘{print $1,$4}‘ log.txt
#格式化输出
awk ‘{printf "%-8s %-10s\n",$1,$4}‘ log.txt
#用法二:awk -F #-F相当于内置变量FS, 指定分割字符,比如用,分割
awk -F, ‘{print $1,$2}‘ log.txt
#或者使用内建变量
awk ‘BEGIN {FS=","} {print $1,$2}‘ log.txt
#使用多个分隔符,先使用空格分割,然后对分割结果再使用“,”分割
awk -F ‘[,]‘ ‘{print $1,$2,$5}‘ log.txt
#用法三:awk -v 设置变量
awk -va = 1 ‘{print $1,$1+a}‘ log.txt
awk -va = 1 -vb = s ‘{print $1,$1+a,$1b}‘ log.txt
#用法四:awk -f {awk脚本} {文件名}
awk -f cal.awk log.txt
#运算符
#过滤第一列大于2的行
awk ‘$1>2‘ log.txt
#过滤第一列等于2的行
awk ‘$1==2 {print $1,$3}‘ log.txt
#过滤第一列大于2并且第二列等于‘Are’的行
awk ‘$1>2 && $2=="Are" {print $1,$2,$3}‘ log.txt
#xargs
#read
#find
find ~ -name adb
find . -name adb
Shell脚本练习