我在新浪博客里面写了很多自己平时练习用的shell,我以后准备在51上写,上面是超链接。
(一)接受一个输入,将输入的字符串的首字母替换掉。
例如
[root@localhost hushuai]# bash 1.sh
input word:ding xue
Ding Xue
[root@localhost hushuai]#
shell 代码如下:
#!/bin/bash
>file1 #每执行一次脚本清空次这个文件
read -p "input word:" ll #read -p 用来接受一个输入
echo $ll |xargs -n1>file #将用户的输入排成一列,xargs 的作用
cat file |while read line #read 的用法每次都读取一行,然后将这一行赋值给line
do
b=`echo $line |cut -c1`#上面有多少行就循环多少次,在每行都取第一个字母
d=`echo $line |cut -c2-` #读取每行都截取第2个以后的字母,也就是说每读取
c=`echo $b |tr 'a-z' 'A-Z'` 一行,循环一次,我们就把这一行拆成俩部分
echo -n "$c$d " >>file1 #细节在$c$d后面有一个空格,不然每一行的输出会
done紧凑在一起。
cat file1
echo#在循环中使用-n ,末尾一定要写个echo
否则就会连在一起
shell 的版本2
#!/bin/bash
>bb
[ -z $1 ] && echo "Usage:`basename $0` word" && exit # `basename $0` 打印出脚本的名字
a=$##$#统计传参的个数,以空格为分隔符
echo $@ |xargs -n1 >aa#$@ 表示传进来的所有参数
for i in `seq $a`
do
c=`cat aa | sed -n ''$i'p'|cut -c1` #传进来几个就循环几次,中间和
d=`cat aa | sed -n ''$i'p'|cut -c2-`上面的原理一样
e=`echo $c |tr 'a-z' 'A-Z'`
echo -n "$e$d " >>bb
done
cat bb
echo
这两个的核心是一样的,同样我们也可以用sed 来完成
例如:
[root@localhost /]# echo ding xue | sed -r 's/([^ ]+)/\u&/g'
Ding Xue
[root@localhost /]#
我对里面知识的一些总结:
比如说:xargs 就两个作用,把一行换成一列,一列换成一行
[root@localhost /]# seq 3 |xargs
1 2 3
[root@localhost /]# seq 3 |xargs -n2
1 2
3
[root@localhost /]# seq 3 |xargs -n2 |xargs
1 2 3
如果是一个接受用户输入的我们一般用read 命令
一般有两种写法:
(1)read -p "Input:" a
echo $a
(2)echo -n "Input:" #细节,我写-n 是有道理的,不然输出就是第一种
read Input情况。不美观。
echo $Input
(3)
#!/bin/bash
echo -n "Input:"
read
echo $REPLY#是一个内置函数,读取用户输入的内容。
输出结果:
[root@localhost /]# bash 18.sh
Input:
a
a
[root@localhost /]# bash 18.sh
Input:a
a
~
read 还有常用的 read -s 不回显 read -t 等待用户最长输入时间
脚本中可能会遇到的几个常用传参
例如:
#!/bin/bash
a=$#
echo $a $# 统计传进来参数的个数
b=$@$@ 传进来的字符串
echo $b
~
看效果:
[root@localhost /]# bash 16.sh ding xue
2
ding xue
[root@localhost /]#
echo $b | xargs -n1 如果添加这么一条,结果将变为:
[root@localhost /]# bash 16.sh ding xue
2
ding xue
ding
xue
[root@localhost /]#
如果我们把上条换成这样:
c=`echo $b | xargs -n1`
echo $c
输出将变为:
[root@localhost /]# bash 16.sh ding xue
2
ding xue
ding xue #这个地方就变成横向排列,因为加上反引号shell就会认为竖着
[root@localhost /]#东西横过来。例如:
[root@localhost /]# echo `seq 9`
1 2 3 4 5 6 7 8 9
[root@localhost /]#
当我们受read 输入时经常用的是:
#!/bin/bash
read -p "Input:" a
echo $b
看结果
[root@localhost /]# bash 15.sh
Input:ding xue
8#统计了8个说明什么,把空格也算上了
[root@localhost /]#