shell 编程入门

export  变量名    

env  显示环境变量

set   显示全局变量

export AA=20   习惯大写

readonly aa  不能修改也不能删除

位置参量,类似于C中的int main(int argc,char *argv[])

数组定义:str=(math english good)    

echo ${str[*]}  全部打印

echo ${#str[*]}  元素个数

echo ${str[0]}  第一个元素


read var  从标准输入获取,赋给var(局部)

read   标准输入读取一行并赋给内置变量REPLY

read -a arr   读取一组词,依次赋给arr

read -p "input please:" -t 10 -a arr  标准输入,随即输出到设备

echo -n "hello world"  后面就不会跟上换行

echo -e "\t"a    转义

echo `pwd`  或者  echo $(pwd)   命令嵌套

echo $[$n+1]   里边有没有空格都可以

echo $(($n+1))  同上

((n+=1))  echo $n   或  echo $((n+=1))

expr 4 + 5   加号两边必须有空格

r=`expr 4 + 5`   echo $r

let "n=n+1"

let "n=n+abc"


x=5;y=10;     test $x -gt $y    echo $?

字符串测试,两边必须有空格:

str=abc    [ -z $str ]   为空时返回0,也就是真

[ -n $str ]    不为空时返回真,0

[ "$str1" = "$str2" ]   判断相等

[ "$str1" != "$str2" ]  不等

整数测试:

[ $int1 -gt $int1 ]

[ $int1 -lt $int2 ]

[ $int1 -ne $int2 ]

[ $int1 -ge $int2 ]

[ $int1 -le $int2 ]

整数测试也可以用let或双圆括号测试:

x=1  let "x == 1"  echo $?   ((x >=2))    他们相应的操作符为 = > < >= <= !=     let 和双圆括号中有没有空格都可以

x=1;name=Tom

[ $x -gt 1 -a -n $name ]   echo $?

[[ $x -ge 1 && -n $name ]]   echo $?  也是可以的,类似与C

[ $name = " " ]  检查是否为空值,两边必须有空格

test []  基本是可以互换的。


#!/bin/bash
if [ $1 -lt "10" ]
then
<span style="white-space:pre">	</span>echo "$1 < 10 "
elif [ $1 -gt "10" -a $1 -lt "50" ]
then 
<span style="white-space:pre">	</span>echo "10< $1< 50"
else
<span style="white-space:pre">	</span>echo hehe
fi


case $1 in
A)
<span style="white-space:pre">	</span>echo it is A
<span style="white-space:pre">		</span>;;
b|B)
<span style="white-space:pre">	</span>echo it is B or b
<span style="white-space:pre">		</span>;;
*)
<span style="white-space:pre">	</span>echo other
easc


for i in 1 2 3 4 5
do
<span style="white-space:pre">	</span>echo the value is $i
done


for i in $*
do
<span style="white-space:pre">	</span>echo $i
done

接下来就替换文件名:

#!/bin/bash
for i in *
do
<span style="white-space:pre">	</span>counter=$[counter+1]
done
echo there are $counter file in $(pwd)

更通用的for:

#!/bin/bash
if [ $# -ne "1" ]
then 
echo "error"
<span style="white-space:pre">	</span>exit 1
fi
if [ $1 -lt "5" -o $1 -gt "15" ]
then
<span style="white-space:pre">	</span>echo "error error"
<span style="white-space:pre">	</span>exit 1
fi
for((i=0;i<$1;i++))
do
<span style="white-space:pre">	</span>for((j=0;j<$[$1-$i-1];j++))
<span style="white-space:pre">	</span>do
<span style="white-space:pre">		</span>echo -n " "
<span style="white-space:pre">	</span>done
<span style="white-space:pre">	</span>for((j=0;j<$[$i*2-1];j++))
<span style="white-space:pre">	</span>do
<span style="white-space:pre">		</span>echo -n "*"
<span style="white-space:pre">	</span>done
<span style="white-space:pre">	</span>echo                 # 相当于 echo -ne "\n"
done
</pre><pre name="code" class="html">
while:
</pre><pre name="code" class="html">while [ $curline -lt $line ]
do
<span style="white-space:pre">	</span>nspace=$[$line-$curline-1]
<span style="white-space:pre">	</span>while [$nspace -gt 0]
<span style="white-space:pre">	</span>do<span style="white-space:pre">	</span>
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre">			</span>echo -n " "</span>
<span style="white-space:pre">	</span>done
<span style="white-space:pre">	</span>nstar=$[2*$curline+1]
<span style="white-space:pre">	</span>while [ $nstar -gt 0 ]
<span style="white-space: pre;">	</span>do 
<span style="white-space:pre">		</span>echo -n "*"
<span style="white-space:pre">	</span>done
<span style="white-space:pre">	</span>echo
`<span style="white-space:pre">	</span>curline=$[$curline+1]
done
</pre><pre name="code" class="html">#!/bin/bash
counter=0
until [ $counter -eq 3 ]
do
<span style="white-space:pre">	</span>echo $counter
<span style="white-space:pre">	</span>sleep
<span style="white-space:pre">	</span>counter=$[$counter+1]
done
#until 与其他恰恰相反,退出状态非0,进入循环。也就是条件成立时却退出循环。
</pre><pre name="code" class="html">
select 循环
#!/bin/bash
select var in man woman
do
    case $var in
    man)
<span style="white-space:pre">	</span>echo man is my favourite
<span style="white-space:pre">		</span>;;
    woman)
<span style="white-space:pre">	</span>ehco woman is my favourite
<span style="white-space:pre">		</span>;;
    *)
<span style="white-space:pre">	</span>echo i like all
    esac
    break
done
</pre><pre name="code" class="html">
#!/bin/bash
fun()
{
<span style="white-space:pre">	</span>echo good morning
<span style="white-space:pre">	</span>echo hello world
}
fun  #调用
</pre><pre name="code" class="html">echo $RANDOM  生成随机数
expr 5 / 3 
expr 5 \* 3   #两边必须有空格
</pre><pre name="code" class="html">
while [ $1 != "" ]
do
<span style="white-space:pre">	</span>echo $*  #$1
<span style="white-space:pre">	</span>shift
done
</pre><pre name="code" class="html">

字符串操作

var=abacde

echo ${#var}   字符个数

echo ${var:3}  显示索引从 3开始的所有字符

echo ${var:2:3}   从3开始的长度

echo ${var/a/b}    将第一次出现的a替换

echo ${var//a/b}   全部替换


sed  流编辑器。sed是一个精简的,非交互式的流编辑器。它在命令行中输入编辑命令和指定的文件名,查看输出。逐行读取文件内容到临时缓冲区,这一切操作并不会改变文件本身的内容。

sed '4,$d' test.in     这个索引是从1开始的,从第四行都删除,只显示前三行。

sed '3q' test.in   只显示前三行

sed 's/hello/wold/' test.in  将每一行第一次出现的hello替换成world

sed -n 's/hello/world/p' test.in    只将有改动的部分打印出来

指定多个命令的方法:

;   sed 's/hello/1/;s/world/2/' test.in

-e    sed  -e 's/hello/1/' -e 's/world/2/' test.in

分行命令:  sed '

> s/hello/1/

> s/world/2/' test.in

也可以这样,将命令打包成文件。用-f来指定

在test.sed 中: s/hello/1/;s/world/2/

sed -f test.sed test.in


sed -n '3,5p' test.in    打印三到五行

sed -n '$p' test.in    值打印最后一行,,  其实可以将-n理解成‘相关操作’

sed -n '/hello world/=' test.in    所匹配的行号

sed -n '/hello world/d' test.in    删除匹配的行

sed '/moringin/a\AAA\

BBB\

CCC' test.in

sed '/moringin/i\AAABBBCCC' test.in

sed -n '/moringin/l' test.in     输出指定行的全部字符(非打印字符除外)


s 替换命令

sed -n 's/hello/baby/gp' test.in

p 打印修改后的行

sed '$r test2.in' test1.in   将2文件的内容读到1的末尾



awk 是一种用于处理数据和生成报告的编程语言。linux下使用的awk是gwk

可以使用重定向将输出保存到文件中。

-F 指定输入记录字段的分隔符默认使用环境变量IFS的值。

-f  从指定文件读取awk_script

-v  为awk设定变量

。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值