编写sh文件要在第一行加入 #!/bin/bash
定义变量:
定义变量直接复制不用定义: A=1
定义只读变量 readonly B=2
默认都是字符串类型 C=1+1 echo $C
不含空格的时候可以直接不用加变量名 D=hello D="hello world"
传递参数:
echo "$0 $1 ....$9" $0表示脚本名称,$1->$9表示参数
特殊变量echo $# 打印所有参数个数
特殊变量$* 表示命令行中所有参数
特殊变量$@ 表示命令行中所有参数
特殊变量$? 判断最后一次执行返回状态,如果为0表示上一次正常执行,如果不是0表示上一条命令没有正确执行
运算符号:
$((运算式)) 或 $[运算符]
expr 运算符号要有空格 :expr 2 + 3
$[(2+3)+2]
条件判断:
[ condition ] :condition 前后要有空格 [ 23 -ge 22 ]
=
lt
le小于等于
eq等于
-r 读权限
-w写权限 [ -w 文件名 ]
-x执行权限
-f是否是一个常规文件
-e是否存在 [ -e 文件名 ]
-d是否是一个目录
多条件判断 $$表示and ||表示or
流程控制:
条件流程
#!/bin/bash
if [ $1 -eq 1]
then
echo "我是1"
elif [ $1 -eq 2]
then
echo "我是2"
fi
case流程:
#!/bin/bash
case $1 in
1)
echo "1"
;;
2)
echo "2"
;;
*)
echo "其他值"
;;
esac
for循环语句:好像不能运行,不知道哪里错了,明天看一下
#!/bin/bash
s=0
for ((i=1;i<=100;i++))
do
s=$[ $s+$i]
echo $s
done
example.sh
#!/bin/bash
for s in $*
do
echo $s
done
sh example.sh 1 2 3 4
while循环: #下面程序有语法错误,自己细心再检查一下
while [ 条件判断式 ]
do
echo
done
example.sh
s=0
i=1
while [ $i -le 100 ]
do
s=$[$s+$i]
i=$[$i+1]
done
echo $s
READ读取控制台:
read(选项)(参数)
-p 指定读取值时的提示符
-t 指定读取值时的等待时间 (超过时间自动跳过)
参数
读取的变量名
#!/bin/bash
read -t 7 -p "input your name" NAME
echo $NAME
系统函数
bashname函数 截取文件名称 dirname /a/b/c.txt 返回c.txt
dirname函数 dirname +文件的绝对路径 ; 截取文件路径 dirname /a/b/c.txt 返回/a/b
dirname+bashname就是系统全路径名称
自定义函数:
定义输入两个参数之和函数:
example.sh
#!/bin/bash
function sum()
{
s=0;
s=[$1+$2]
echo $s
}
read -p "input your paratemer1" P1 #输入第一个值
read -p "input your paratemer2" P2 #输入第二个值
sum $P1 $P2 #调用求和函数
bash example.sh
shell工具
cut:从一堆文件中剪数据用;cut[ 选项参数 ] filename
选项参数:-f:列好提取第几列 -d 分割符号,按照指定分隔符分割列
example.txt
beij ing shi
shang hai shi
sheng zheng shi
cut -d " " -f 1 example.txt 或 cut -d " " -f 2 3 example.txt #按空格切取出第一列文件名为example.txt
sed:流编辑器 一次处理一行代码。 sed [选项参数] command filename
-a :新增 -d 删除 -s 查找并替换
将mei nv掺入到example第二行下面
sed "2a mei vn" example.txt
将example中的wo提花为ni
sed "s/wo/ni/g" example.txt
将第二行删除并将wo提花为ni
sed -e "2d" -e "2d" -e "s/wo/ni/g" sed.txt
awk:强大的文本分析工具 awk[选项参数] pattern{action1} pattern{action2} filename
pattern:表示awk数据中查找内容,就是匹配模式。-F 指定
action:找到匹配内容所执行的一系列命令
sort:将文件进行排序,并将排序结果标准输出
sort(选项)(参数)
-n:依照数值大小排序
-r:以相反顺序排序
-t:设置排序