Shell编程
创建sh文件
touch test.sh
vim test.sh
写入如下内容
#!/bin/bash
a="hello"
运行
chmod +x /root/test.sh
. ./test.sh
echo $a
可以运行unset撤销变量
export可以设置全局变量
系统变量
set 查看系统变量
常见的系统变量
echo $HOME /root
echo $PWD /root
echo $SHELL /bin/bash
echo $USER root
其他常用变量
echo $? 返回上一条语句的返回值,0表示执行成功
echo $$ 当前进程号
echo $0 当前脚本名
echo $n 获取运行脚本传递的第n个参数
echo $# 传递参数的个数
echo $* 表示参数列表,如果使用引号包裹输出整体
echo $@ 表示参数列表,如果使用引号包裹输出还是列表
for item in $@
do
echo $item
done
./test.sh 1 2 3 4 5
单引号和双引号的区别
echo "Hi, $a" Hi, hello
echo 'Hi, $a' Hi, $a
算术表达式
res=`expr 1 + 2`
循环
for循环
for item in 1 2 3
do
echo $item
done
while循环
item=1
while((item<=3))
do
echo $item
let item++
done
case语句
case $1 in
a)
echo "aaa"
;;
b)
echo "bbb"
;;
*)
echo "(a|b)"
esac
运行./test.sh a 输出 aaa
read
read -p "input a number" num
echo $num
if
if [ $1=a ]
then
echo "aaa"
elif [ $1=b ]
then
echo "bbb"
else
echo "--------"
fi
数值条件判断
= 等于
-lt 小于
-le 小于等于
-ep 等于
-gt 大于
-ge 大于等于
-ne 不等于
文件条件判断
-f test.sh 判断文件是否存在
其他的判断符
-r 是否读权限
-w 是否写权限
-x 是否执行权限
-f 是否存在
-s 是否存在且不为空
-d 是否存在并且是目录
函数
function fn()
{
echo $1, $2;
return $(($1+$2));
}
fn 1 2;
echo $?;
cut
文本分割操作
a='a|a|c|d'
echo $a | cut -d '|' -f 2 输出结果 b
sort
排序操作
echo $a | sort -t '|' -k 2 按照第2列字符串排序
echo $a | sort -t '|' -k 2 -u 按照第2列字符串排序,去重
echo $a | sort -t '|' -k 2n 按照第2列数字排序
echo $a | sort -t '|' -k 2nr 按照第2列数字倒序排序
cat file | sort | uniq
sed
sed -i '1d' file 删除文件的第一行
sed -i '1,$d' file 删除文件的所有行
sed -i '$d' file 删除文件的最后一行
sed -i '/aaa/'d file 删除文件中包含aaa的行
sed -i 's/aaa/bbb/g' file 将所有的aaa替换成bbb
awk
echo $a | awk -F "|" '{print $1}' 输出分割的第一列