1. 程式人生 > >shell 整理(25)=====替換大小寫字母

shell 整理(25)=====替換大小寫字母

shell 腳本心得

這是我的新浪博客,有我寫的所有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)=====替換大小寫字母