#!/bin/bash
read dir1
for d in $dir1
do mkdir $
cd $
for file in
doecho "cur dir: $, create file: $.c"
touch $.c
done
cd ..
done
echo "create file success!"
awk 'beginend' ./test.txt
變數替換:
一:簡單賦值和替換
a=bcd
$ echo $a
bcd$ echo $
bcd二:變數擴充
除了shell中的meta,其它的[^a-za-z0-9_]幾乎都可以作單詞邊界。
同sed中關於單詞邊界[^a-za-z0-9_]的描述。
這些功能有時候會在程式中有意想不到的作用!
例如:$ a=bcd
$ echo $.b
bcd.b
$ echo $a.php
bcd.php
$ echo $a%b
bcd%b
$ echo /$a/bc
/bcd/bc
對於shell中的meta字元,則backslash。
$ echo $a\*b
bcd*b
三:變數中的變數
$ a=bcd
$ b=efg
$ c=$a$b
$ echo $c
bcdefg
$ d=$c.ghi
$ echo $d
bcdefg.ghi
思考:若變數互相巢狀,會怎樣呢?
四:變數的特異功能
到網中人的啦!(ps:重寫真是沒激情啊)
file=/dir1/dir2/dir3/my.file.txt
我們可以用 $ 分別替換獲得不同的值:
$:從變數file的字串左邊開始,刪除字元直到第乙個「/」:dir1/dir2/dir3/my.file.txt
$:從變數file的字串左邊開始,刪除字元直到最後乙個「/」:my.file.txt
$:從變數file的字串左邊開始,刪除字元直到第乙個「.」:file.txt
$:從變數file的字串左邊開始,刪除字元直到最後乙個「.」:txt
其實,在「#」後面,無非就是乙個匹配問題,不限於兩個,你可以放任意個字元,還可以用shell中另外的萬用字元「?」「[…]」「[!…]」,例如:
$ echo $
1/dir2/dir3/my.file.txt
$ echo $
/dir2/dir3/my.file.txt
$ echo $
/dir3/my.file.txt
「#」:相當於最小匹配,遇到乙個最小的符合其後表示式的字串(單個或多個)即中止匹配動作;
「##」:相當於最大匹配,它盡可能的匹配更多的字元。
我們可以拿「*」來說明:
* 在shell中表示匹配任何符號包括空。當它在只有乙個 # 的變數替換中,受最小匹配的影響,它不會匹配任何可列印字元,只匹配乙個空,也就是什麼也不匹配,你完全可以忽略它的存在;
當在有兩個 ## 的變數替換中,受最大匹配的影響,乙個 * 表示匹配整個字串。
如果想匹配字元「*」時,要在「*」前加乙個「\」,其後的「*」失去萬用字元的功能。
但是還有一種例外情況(請接著看)
例:$ file2=abcd.efgh.ijkl.oopp
$ echo $
$ echo $
想想上面兩個的輸出是什麼?
$ echo $
oopp
$ echo $
空??知道為什麼嗎?因為:「*」匹配任何符號包括空。遇到乙個「#」時,最後乙個「*」就匹配「空」去了。看下面的:
$ echo $
opp$ echo $
opp$ echo $
opp$ echo $
空do you know?
$ echo $file3
*ab*de*cd
看看下面將輸出什麼?
$ echo $
*de*cd
$ echo $
*ab*de*cd
$ echo $
空$ echo $
*de*cd
$ echo $
ab*de*cd
$ echo $
空$ echo $
b*de*cd
$ echo $
b*de*cd
不知各位有沒有發現,「*」在乙個「#」中時,並不一定代表「空」,它可能代表乙個字元「*」也可能代表其他的什麼字元,如上例的:
「$ echo $」輸出為「b*de*cd」,其實這還是符合最小匹配理論的。這個表示式的意思是:從變數file3的字串左邊開始刪除字元,直到遇到第乙個字元「a」。所以不要和「$ echo $」混淆,雖然兩個結果是一樣,但意思是不一樣的。
再舉幾個例子,相信大家更容易理解這段話:
$ echo $file3
*ab*de*cd*ab*de //注意:出現兩個「*ab」
$ echo $
b*de*cd*ab*de //刪除字元,直到出現第乙個「a」,「*」為萬用字元
$ echo $
b*de //刪除字元,直到出現第二個「a」,「*」為萬用字元
$ echo $
b*de*cd*ab*de //刪除字串「*a」,「*」在「\」表示字元「*」
除了萬用字元「*」比較難理解一點,其他的shell萬用字元就都很容易了。
至於「%」,和「#」不同的地方,就是從變數字串右部開始。
$:從右部開始拿掉字元,直到遇到(從右部數起的)第乙個「/」 :/dir1/dir2/dir3
$:從右部開始拿掉字元,直到遇到(從右部數起的)最後乙個「/」:(空值)
$:從右部開始拿掉字元,直到遇到(從右部數起的)第乙個「.」:/dir1/dir2/dir3/my.file
$:從右部開始拿掉字元,直到遇到(從右部數起的)最後乙個「.」:/dir1/dir2/dir3/my
單匹配格式$
全匹配格式$
例子:[test]# echo $
[test]# echo $
324,2354.329.5324
[test]# echo $
324 2354.329.5324
[test]# echo $
324 2354 329 5324
[test]# echo $
324,2354,329,5324
[test]# echo $
[email=324@2354@329@5324]324@2354@329@5324[/email]
總結一點結果.${}中:
/代表字串的替換.
:代表字串的提取.
#和%公別代表左截和右截.
root@ubuntu:/home/jason# awk -f":" '' /etc/passwd
判斷當前路徑乙個檔名的檔案是否存在。
#! /bin/sh
echo "please input file name:"
read filename
if [ -f "$filename" ]; then
echo "yes"
else
echo "no"
fi
shell獲取最新檔案
背景 交易所每天發檔案給券商,但是字首一樣,名字字尾為月日,但是節假日不一定在交易日生成某些檔案,所以需要獲取同名字最新生成的檔案 引數說明 a 顯示所有檔案及目錄 開頭的隱藏檔案也會列出 l 除檔名稱外,亦將檔案型態 許可權 擁有者 檔案大小等資訊詳細列出 r 將檔案以相反次序顯示 原定依英文本母...
python建立新檔案 python建立和刪除檔案
usr bin python coding utf 8 指定編碼格式,python預設unicode編碼 import os directory dir os.chdir directory 切換到directory目錄 cwd os.getcwd 獲取當前目錄即dir目錄下 print curre...
Linux 修改檔案時間及建立新檔案
檔案時間 modification time mtime 當該檔案的 內容資料 更改時,就會更新這個時間。內容資料指的是檔案的內容,而不是檔案的屬性或許可權 status time ctime 當該檔案的 狀態 改變時,就會更新這個時間,舉例來說,像是許可權與屬性被更改了都會更新這個時間 acces...