1. shell脚本的格式
#! /bin/bash
echo “helloworld”
保存为test.sh
运行分为两种方法
第一 进入到当前目录授权 chmod+x test.sh
第二 ./test.sh
test.sh 其实是作为可执行程序,就是相当于命令,以前不理解。
另一种运行方法 /bin/bash test.sh 作为解释器的参数运行,此时脚本第一行注释可以不加。
2. shell变量的定义
字母,下划线和数字组成
不能出现空格
不能以数字开头
不能使用标点符号
不能使用bash里面的关键字(help可查看)
3.for循环
for循环
1.seq控制固定的次数
for i in (seq 1 5)
do
echo $i
done
2.对参数输出
for arg in “$@”
do
echo $arg
done
3.基本的for循环
for x in one two three four
do
echo $x
done
4.while循环的使用
1. 循环输出1-10
#! /bin/bash
x=1
while [ $x –lt 10 ];
do
echo $x
x=$((x+1))
done
5.特殊变量代表的含义
$@----所有参数(将各个参数分开输出)
$# -----参数个数
$? -----执行后的返回值
$0 -----shell文件名本身
$1 -----第一个参数
$*-----所有参数(所有参数作为整体)
${file/,*} -----删除file文件后面最后一个逗号以及后面的字符
6.shell里面if语句的使用
myfile="aa.txt"
if [ ! -f $myfile ]; then
echo $myfile" is not exist"
touch $myfile
else
echo $myfile" is exist"
fi
if [ ! -s $myfile ]; then
echo "hello, my master" > $myfile
else
echo $myfile" is not null"
fi
笔记:if后面跟的是中括号,一定要有空格。
中括号里面的判断也要加空格,不要紧贴中括号。
while语法也是这样。
7.shell常用命令工具的使用
awk
cat /etc/passwd | awk ‘{FS=’:’} $3 < 10 {print $1 “:” $3}’
域分隔符为: 第三列小于10, 打印第一列和第三列,中间使用冒号
last -n 5| awk '{print $1 "\t lines: " NR "\t columns: " NF}' NR指的是第几行,NF指列
root lines: 1 columns: 10
split
设定每个文件的行数是40000行。
split -40000 sourfile destfile_
sed ----替换作用 sed ‘s/abc/def/g’ filename
----删除文件第一行 sed -i ‘1d’ filename sed –I ‘1,2d’ filename 删除1行2行
----删除文件最后一列 sed –I ‘$d’ filename
sort ----排序输出 –r表示逆序 cat test.txt|sort -r
cut ----echo “root:x:0:0:root:/root:/bin/bash” | cut -d : -f 1,5 输出 root:root
tee ---- 和重定向 > 的区别是不仅能输出到屏幕还能输出到文件中。 ls |tee file.txt
uniq ----去重 cat file.txt|uniq
wc ---计算多少行 cat file.txt|wc –l
tr ---只对输入进行处理 tr abc xyz < sourfile 替换作用
grep ---过滤文本命令
8.逐行读取文件
----readLine.sh
#! /bin/bash
while read LINE
do
echo $LINE
done < $1
----./readLine.sh test.txt
9.shell重定向
0代表标准输入,1代表标准输出,2代表标准错误输出
command > filename == command 1>filename (覆盖)
command >> filename == command 1>>filename (追加)
才知道默认输出就是标准输出
command >filename 2>&1 ----意思就是将标准错误输出和标准正确输出一起输出到文件中
10.shell数组
colors=(‘red’ ‘yellow’ ‘ blue’ ‘white’) 空格隔开
colors[0]=’red’
for color in ${colors[@]}
do
echo ${color}
done
11.shell接收用户输入
read –p “enter your name” –t 30 –s name
-p 输出提示信息
-t 等待时间
-s 隐藏用于加密 即在键盘上看不到输入的信息
read –p “enter your name” name
将输入的信息存入到变量name中,键盘上也可以看到输入的信息
echo "$name,welcome" --将输入打印出来