shell 整理(25)=====替換大小寫字母
這是我的新浪博客,有我寫的所有shell
我在新浪博客裏面寫了很多自己平時練習用的shell,我以後準備在51上寫,上面是超鏈接。
(一)接受一個輸入,將輸入的字符串的首字母替換掉。
例如
[[email protected] hushuai]# bash 1.sh
input word:ding xue
Ding Xue
[[email protected] 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 [email protected] |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 來完成
例如:
[[email protected] /]# echo ding xue | sed -r ‘s/([^ ]+)/\u&/g‘
Ding Xue
[[email protected] /]#
我對裏面知識的一些總結:
比如說:xargs 就兩個作用,把一行換成一列,一列換成一行
[[email protected] /]# seq 3 |xargs
1 2 3
[[email protected] /]# seq 3 |xargs -n2
1 2
3
[[email protected] /]# 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
輸出結果:
[[email protected] /]# bash 18.sh
Input:
a
a
[[email protected] /]# bash 18.sh
Input:a
a
~
read 還有常用的 read -s 不回顯 read -t 等待用戶最長輸入時間
腳本中可能會遇到的幾個常用傳參
例如:
#!/bin/bash
a=$#
echo $a $# 統計傳進來參數的個數
[email protected] $@ 傳進來的字符串
echo $b
~
看效果:
[[email protected] /]# bash 16.sh ding xue
2
ding xue
[[email protected] /]#
echo $b | xargs -n1 如果添加這麽一條,結果將變為:
[[email protected] /]# bash 16.sh ding xue
2
ding xue
ding
xue
[[email protected] /]#
如果我們把上條換成這樣:
c=`echo $b | xargs -n1`
echo $c
輸出將變為:
[[email protected] /]# bash 16.sh ding xue
2
ding xue
ding xue #這個地方就變成橫向排列,因為加上反引號shell就會認為豎著
[[email protected] /]# 東西橫過來。例如:
[[email protected] /]# echo `seq 9`
1 2 3 4 5 6 7 8 9
[[email protected] /]#
當我們受read 輸入時經常用的是:
#!/bin/bash
read -p "Input:" a
b=${#a} #統計字符串的個數(包括空格)
echo $b
看結果
[[email protected] /]# bash 15.sh
Input:ding xue
8 #統計了8個說明什麽,把空格也算上了
[[email protected] /]#
本文出自 “IT生活” 博客,謝絕轉載!
shell 整理(25)=====替換大小寫字母