文章目录
查看当前计算机使用的shell
echo $SHELL
输出重定向
正确
覆盖
ifconfig > test.log
追加
ifconfig >> test.log
错误
覆盖
ifconfiff 2> test.log
追加
ifconfiff 2>> test.log
同时追加到文件
一起保存
命令 &>>文件
分开保存
命令>>正确文件 2>>错误文件
输入重定向
wc -c < test.log
-c:统计字节数
-w:统计单词数
-l:统计行数
多命令顺序执行
;
顺序执行
&&
同java
||
同java
管道符
命令1 | 命令2
命令执行的结果会传递给命令2
ls -l /etc/ | more
通配符
特殊符号
$()
将系统变量赋值
gg=$(date)
echo $gg
2020年 4月15日 星期三 16时28分54秒 CST
对于shell所有变量赋值默认是字符串
set
查看系统所有变量
set -u
如果变量不存在,会提示
删除变量
unset a
环境变量
环境变量在当前shell和这个shell的所有子shell中生效
export y=6
查看环境变量
env
位置参数变量
$1:代表第一个参数
$2:代表第二个参数
#!/bin/bash
sum=$((10 + 20))
echo $sum
sum1=$1
sum2=$2
sum3=$((sum1 + sum2))
echo $sum3
./sum.sh 32 48
30
80
$*、$@、$#
#!/bin/bash
# 将输入作为整体,只循环一次
for i in "$*"
do
echo $i
done
# 将输入作为单个,一个一个循环
for j in "$@"
do
echo $j
done
# 打印参数个数
echo $#
./canshu.sh 11 22 33 44 55 66
$?、$$、$!
$?
返回上一个命令执行状态,0为正确,非0为错误
$$
当前进程的进程号
$!
后台运行的最后一个进程的进程号
read
#!/bin/bash
# -p:提示文本
# -t:停留时间
read -p "xingming:" -t 30 name
echo $name
# -s 用户输入信息不现实在命令行上
read -p "mima:" -s passwd
echo -e "\n"
echo $passwd
# -n 控制用户输入的长度
read -p "xingbie:" -n 1 xingbie
echo -e "\n"
echo $xingbie
数值运算
声明整数
声明数组
查看变量类型
其他
运算
$(())
echo $((aa + bb))
33
或
echo $(($aa + $bb))
33
变量测试
判断
文件判断
文件权限判断
文件比较
数值比较
注意[]里面的空格
[ $i -le 100 ]
字符串比较
多重判断
if
单分支if
#!/bin/bash
test=$(env | grep USER | cut -d "=" -f 2)
if [ "$test" == "xiehanchao" ]
then
echo "is yaoyan"
fi
#!/bin/bash
test=$(env | grep USER | cut -d "=" -f 2)
if [ "$test" == "xiehanchao" ]
then
echo "is yaoyan"
else
echo “no”
fi
多分支if
if []
then
elif []
then
else
fi
退出if
exit 错误码
case语句
#!/bin/bash
read -p "请输入y or n:" type
case $type in
"y")
echo "shi yes"
;;
"n")
echo "shi no"
;;
*)
echo "请输入正确的"
esac
循环
语法1
对指定目录下的所有zip文件解压
#!/bin/bash
cd /Users/xiehanchao/studyshell
ls *.zip > ziplog.log
for fileName in $(cat ziplog.log)
do
echo $fileName
unzip -n $fileName -d ./tt &> log.log
done
while循环
#!/bin/bash
s=0
i=1
while [ $i -le 100 ]
do
s=$(($i+$s))
i=$(($i+1))
done
echo $s
通配符
正则表达式
grep取反
ls | grep -v “需要取反的字符串”
字符截取命令
提取列
awk
$2代表截取的列数
awk '{printf $2 "\t" $4 "\n"}' student.txt
截取根路径使用占比
设置分隔符
条件语句
sed
打印第二行
删除第2-4行
替换
替换整行
替换单个字符
3s:第三行
02/09:将02替换成09
g:如果有多个替换多个
多个命令链接
sort 排序
默认排序
按照字符串分割,并按照制定列排序
-n 按数字进行排序,默认是字符串
统计命令
统计文件夹下所有java文件行数
#!/bin/bash
s=$(ls *.sh | grep -v conutJava.sj)
count=0
for i in $s
do
t=$(cat $i | wc -l)
echo $t
count=$(($count+$t))
done
echo "总数"$count