當前位置:首頁 » 編程軟體 » 腳本IFS

腳本IFS

發布時間: 2022-10-10 00:08:12

⑴ 請問Excel判斷功能問題

換個公式試試,例如:在A1單元格輸入A、B、C、……H後,B1單元格就顯示各個字母相對應的1、2、3……8,當然你也可以另行自定義,達到IF函數判斷的效果。B1公式=INDEX({1,2,3,4,5,6,7,8},MATCH(A1,{"A","B","C","D","E","F","G","H"}, ))
如果判斷不夠,參照以上公式照貓畫虎地往後寫就可以了。反正A返回1、B返回2、C返回3……

⑵ shell腳本 {}中IFS以空格和逗號做分隔符,輸出不同

shell環境變數$IFS的用法
S表示 Internal Field Separator (內部欄位分隔符)
示例:
$ IFS=:
$ a=Hello:World
$ echo $a

輸出的結果是:
Hello World

而不是:
Hello:World

順一門有百福 平安二字值千金 萬象更新

linux shell腳本用到循環、控制語句

#!/bin/sh
# Name: useraddmuti
# Descripton: To add users to your system. Users can be list in a file.
# To exec this command your ID must be 0.
# Author: [email protected]
#-----------------------------------
chkUID(){
getUID(){
id|sed -e 's/(.*$//' -e 's/^uid=//'
}

if [ "`getUID`" -ne 0 ]
then
echo -e "\tYou are not root!"
exit 0
fi
}
chkUID
usagePRT(){
echo ${USAGE:='USAGE:' `basename $0` '-f namelistfile'}
}
chkFILE(){
if [ ! -z "`awk 'NF!=2{print NF;exit;}' $1`" ] && [ "`awk 'NF!=2{print NF;exit;}' $1`" -ne 2 ] ; then
echo -e "The file's format is not right!"
exit 0
fi
}

userCHK(){
for USER in `awk '{print $1;}' $1`
do
if grep -wq $USER /etc/passwd ; then
echo -e "The user($USER) has been added!"
exit 1
fi
if echo $USER|grep -wq "^[0-9].*" ; then
echo -e "The user($USER)'s name is wrong format!"
exit 1
fi
done
}

setOPT(){
echo -e "Now Let's set some options or you can use default settings."
setGRPNAME(){
while :
do
echo -e "Would you like to add a new group to add these users to it?"
echo -e "Enter YES to create a new group otherwise you must verify the group."
printf "Your Answer: "
read grpopt
case $grpopt in
yes)
printf "Please enter the group's name: "
read grpoptnew
if cat /etc/group|sed 's/:.*//'|grep -wq $grpoptnew ; then
echo "The group's name($grpoptnew) exist."
exit
else
grpname=$grpoptnew
echo -e "All these users will be added to group($grpname)..."
echo -e "Adding group ..."
if cp /etc/group /etc/group.$$ >; /dev/null 2>;&1 ; then
if groupadd $grpname ; then
echo -e "The group($grpname) is added!"
rm -f /etc/group.$$
break 1
else
echo -e "There's something wrong when adding the group($grpname)."
echo -e " *** Please recovered the group file. *** "
echo -e "You can cp /etc/group.$$ to /etc/group to recover."
fi
else
echo "Error! Please check the program or your disk space."
exit 0
fi
fi
;;
*) : ;;
esac
done
}
setGRPNAME
}

addUSER(){
if cp /etc/passwd /etc/passwd.$$ && cp /etc/shadow /etc/shadow.$$ ; then

for user in `sed 's/ .*//' $1`
do
pass=`awk '{
$1~/$name/
{print $2;exit}
} name=$user' $1`
if [ -z "$pass" ] ; then
echo -e "The passwd is used by default sun123."
pass=sun123
fi
if [ ${#pass} -lt 6 ] ; then
echo -e "The user($user)'s password is too short!"
echo -e "Use default password: sun123."
pass=sun123
fi
if useradd $user ; then
echo -e "The user($user) is added."
if echo $pass|passwd $user --stdin >; /dev/null 2>;&1 ; then
echo -e "The user($user)'s password is setted!"
else
echo -e "The user($user)'s password is NOT set!"
fi
else
echo -e "The user($user) is NOT add."
fi
done
rm -f /etc/passwd.$$ /etc/shadow.$$
else
echo -e "There something wrong when backup the passwd and shadow file."
fi
}

if [ $# -ne 2 ] ; then
usagePRT
exit 0
fi

case "$1" in
-f)
if [ -f "$2" ] ; then
echo -e "Reading usernamelist file""("$2")" "..."
chkFILE $2
userCHK $2
setOPT
addUSER $2
else
echo -e "There's no usernamelist file!"
fi
;;
*) usagePRT
exit 0
;;
esac

⑷ shell腳本 IFS沒有生效的問題

cd${0%/*}表示刪除從變數$0尾部開始第一個正斜岡之後匹配到的內容,返回剩下的內容。比如$0是這個目錄/home/john/source那麼就是把"/source"截取掉剩下的。

⑸ linux下開發腳本搜索子目錄批量更改文件名

前言
本文主要給大家介紹了關於Linux shell用sed批量更改文件名的相關內容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹吧。
示例

去除特定字元
目標:將 2017-01-01.jpg、2018-01-01.jpg 改為 20170101.jpg、20180101.jpg

方法:將所有 - 替換為空
for file in `ls | grep .jpg`
do
newfile=`echo $file | sed 's/-//g'`
mv $file $newfile
done

這里使用sed進行標准輸出的字元串替換,其通用格式如下:
stdout | sed 's/pattern/replace/'

上述示例中,在末尾添加g用於替換所有匹配項,而不僅僅替換第一個匹配項。
中間插入字元
目標:將 book01.txt、paper02.txt 改為 book-01.txt、paper-02.txt
方法:用分組匹配分別獲取待插入位置兩側的字元串,再通過反向引用實現替換
for file in `ls | grep .txt`
do
newfile=`echo $file | sed 's/\([a-z]\+\)\([0-9]\+\)/\1-\2/'`
mv $file $newfile
done

分析

上述示例首先通過 ls 和 grep 命令得到待改名的文件列表,然後用 sed 命令進行字元串的替換,最後再使用 mv 命令來完成文件名的更改。
獲取待改名文件列表的方法有很多,可以通過 find 命令,也可以直接給出字元串,我們將在下文中提到。
注意 for 循環後面的 ls | grep .txt,這條命令用兩個反單引號括了起來,與 $(ls | grep .txt) 的作用相同,被包圍的字元串會被當作命令執行,然後返回字元串結果。
文件名包含空格的解決方法
我們可以直接將文件列表寫到 for 循環中,而不是通過命令來得到,例如:
for file in "file1 file2 file3"
do
...
done

可以看到 for 循環是通過空格來分割字元串,因此如果待更改的文件名中包含空格的話,就會被拆分成多個文件名,從而出錯。
要解決這個問題,我們可以將 IFS(內部欄位分隔符)設置為換行符 \n,這樣一來,for 循環就會按行來獲取變數的值,確保每次獲取的確實是一個完整的文件名。
設置 IFS 變數的命令需要放在 for 循環之前:
IFS=$'\n'
for file in `ls`
do
...
done

也可以直接使用 while read 命令一次讀取一行到變數 file 中:
ls | grep "*.txt" | while read file
do
...
done

使用 find 獲取文件列表
之前的示例中,我們是通過 ls 命令來獲取文件列表。該命令只能獲取某個目錄的文件,而且沒法進行多種條件的篩選。
而一說到文件的查找,不得不提到功能強大的 find 命令。該命令可以在多個層次的目錄中查找文件,並能夠設定諸如創建時間、文件大小、所有者等多種條件,查找起文件來特別方便靈活。
用 find 命令來獲取文件列表,再用 sed 命令配合正則表達式來修改文件名,這兩個命令的結合幾乎能完成所有常見的批量改名任務。
例如,將所有大於1M,且後綴為txt或jpg的文件,由形如 book_20170101.txt、image_20170101.jpg 的文件改名為 20170101-book.txt、20170101-image.jpg,代碼如下:
for file in `find . -size +1M -name "*_*.txt" -o -name "*_*.jpg"`
do
newfile=`echo $file | sed 's/\([a-z]\+\)_\([0-9]\+\)./\2-\1./'`
mv $file $newfile
done

⑹ shell腳本中awk命令內置參數與腳本參數沖突,如何使用內置參數

題主你好,
先聲明一下,我的腳本不是太好,供參考.
首先IFS不是awk的內置變數, 而是shell內置變數.
另外awk內部的變數和awk外部語句的變數是兩套機制,也就是說假設有個變數a=1,你使用awk '{print a}' 並不會輸出1 //當然我的awk語句寫的不完整,只是為了表達意思.
你想要在awk中使用外部變數,要使用-v參數或是在最後追加參數的方式將想要使用的變數導到awk空間中, 才能使用,也就是說:
awk -v var="$a" '{print var}' 文件名 //此時你可以使用變數var間接輸出變數a的值.
或者寫為:
awk '{print var}' var="$a"文件名
====
寫在最後: 因為我的腳本不太好,所以調試信息也看不大明白,不過感覺應該不難,題主可以舉一個簡單具體一點的例子說明一下你想執行哪條語句,輸出什麼結果,我幫你看一下.

⑺ shell腳本中IFS環境變數問題

for entry in `cat /etc/passwd` 執行這個的時候已經把命令的輸出展開為一個list列表了,依據的就是當前的IFS,所以後面的再指定IFS,並不會影響已經分割好的列表。因此外層循環中的每個entry是依據換行符分割的字元串,內層循環是依據:分割的字元串

⑻ shell腳本 ,如果用 for in 語句,讀取一行內容,急用,請高手回答。 for file in `ls -l --full-time ·

#!/bin/sh
#設置IFS環境變數,這個變數是用來定義分隔符類型的。默認的分隔符為空格、換行符、tab。
#在你的需求中,只需要設置IFS變數的內容為換行符。
#先存儲IFS默認值
IFS_old=$IFS
IFS=$'\n'
for line in $(ls -l --full-time)
do
echo $line
done
#將IFS變數還原為默認值
IFS=$IFS_old

⑼ 如何將IFS設置位換行符

准備

首先,你需要安裝ImageMagick,這是一個非常強大的圖形處理圖軟體套件,專門通過終端進行。你可以非常簡單地通過Homebrew來安裝ImageMagick。如果你沒有安裝Homebrew,或者你可能並不知道它是什麼,你可以在主頁上學習了解並安裝它。

如果你已經安裝了Homebrew,打開終端並輸入:

brew update

這是確定你是否從Homebrew上安裝的最新的安裝包,這個也是確認你是否有安裝Homebrew。

那麼,現在,通過使用Homebrew來安裝你所需要的安裝包。現在輸入下面的命令:

brew install ImageMagick

你將會看到一些列的東西通過Homebrew,展示了ImageMagick安裝的詳細過程,因此跟著步驟安裝。

接下來,你也需要安裝Ghostscript,因為你將使用的ImageMagick會依賴它。Ghostscript是一個軟體套件用於呈現PDF和PS文件。你需要它是因為它提供了支持ImageMagick的字體。

安裝Ghostscript通過運行下面的命令:

brew install ghostscript

如果中間發生錯誤,運行這個命令:

brew doctor

如果安裝失敗,你會得到一個消息,並告訴你如何去修復它。

這些是所有你需要安裝的,以在本教程中使用。

Llama你好

ImageMagick中有許多命令,但在本教程中,你需要用到的是convert和composite(轉換和組合)

convert:一張圖片,修改它,然後保存為一張新的圖片;

composite:一張圖片,在它上面覆蓋另外一張圖片,然後存為新的第三張圖片。

本教程中提供一些簡單地圖標供使用。當然,你也可以使用你自己的圖標,但你需要修改為相應的文件名。在這里下載圖標,對於本教程,將其放在桌面上。

這里的目標之一是覆蓋構建版本應用程序的圖標。所以你將看到如何使用ImageMagick覆蓋文本圖像將Hello World放在其中的一個圖標上。打開終端並進入到放應用程序圖標的文件夾:

cd ~/Desktop/AppIconSet

現在輸入:

convert [email protected] -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" test.png

我將會逐一分解這行命令,因此你將會明白它做了寫什麼:

[email protected] 是輸入圖片的名字;
fill white 設置文本為白色;
font Times-Bold 告訴ImageMagick使用什麼字體;
pointsize 18 設置字體的大小為18;
gravity south 文本與圖片的底部對齊
annotate 0 "Hello World" 告訴ImageMagick使帶有"Hello World"文本注釋的圖片旋轉的度數為0度;
test.png 輸出的文件名,並且ImageMagick將會覆蓋掉已經存在的文件。

如果你在終端上沒有看到任何的錯誤,那麼你將會在AppIconSet的文件夾中看到一個命名為test.png的文件,打開後你會看到這樣:

提示:如果你看到了錯誤的消息,或者是腳本沒有作用,那麼可能是你沒有安裝所需的字體。通過運行下面的命令,看下你所能用的字體有哪些。

convert -list font

如果你沒有Times這個字體,那麼選擇一個你可以使用的來代替。

現在,將beta標志載入圖片上。在終端上輸入:

composite betaRibbon.png test.png test2.png

這個是將betaRibbon.png放在test.png的上面,然後將合成的圖片保存為test2.png

打開test2.png。等等,你看到的還是原來的test.png.

那麼為什麼會是這樣呢?

test.png 大小是120x120的,然而,betaRibbon.png是1024x1014的,所以betaRibbon.png只有透明的那部分在test.png上,剩下的部分被裁剪掉了。

不相信我嗎?那麼試下相同的命令,但是將betaRibbon.png 和 test.png位置交換。

composite test.png betaRibbon.png test2.png

你現在將會看到一張在test.png的右上角帶有beta的很大的圖片:

為了得到我們想要的,你需要將betaRibbon.png的尺寸改為120x120的。在ImageMagick中這是非常容易的。僅僅輸入:

convert betaRibbon.png -resize 120x120 smallBetaRibbon.png

這行命令是將betaRibbon.png的大小改為120x120,並保存為smallRetaRibbon.png

現在,執行下面:

composite smallBetaRibbon.png test.png test2.png

打開test2.png,然後你將看到我們期待的:

這些就是在本教程中你需要知道的ImageMagick的功能,但是這些僅僅是ImageMagick功能的冰山一角。點擊ImageMagick的主頁,查看更多關於它的功能。

Xcode

在這些圖像處理工作之後,是時候回到我們熟悉的平台了。

打開Xcode,選擇File\New\Project…選擇 iOS\Application\Single View
Application, 然後點擊 Next. 工程命名為Llama Trot, 選擇語言為 Swift, 然後設置設備為Universal.
然後將工程保存在桌面上。

你的目標是通過Xcode和ImageMagick,根據所選的構建配置,在每次構建時生成一個適當的圖標。

Xcode能夠在你的工程構建時運行腳本來做些事情。運行腳本僅僅是Unix腳本,就像你已經寫過的,在你每次運行你的Xcode的項目時執行。

設置一個運行腳本

在你的工程中,選擇Llama Trot的Target,然後選擇Build Phases,點擊+,在彈出的菜單中選擇New Run Script Phase:

你將會看到Run Script Phase添加到你的工程配置中。

在運行腳本時,Shell參數被自動設置為bin/sh,也就是說腳本將在bash Unix shel中執行。

下面的框是讓你用來寫腳本的。在框中輸入:

echo "Hello World"

你的新的 build phase應該看起來像下面這樣:

構建並運行。你將看到什麼也沒發生。這事因為腳本列印的"Hello World"在你的構建日誌中。

點擊Report Navigator,Xcode的導航欄面板最右邊的圖標,點擊最近構建的報告,像下圖展示的這樣。當你構建一個工程時,這里描述了Xcode為你做的所有的事情,你將會看到"Hello World":

應用圖標

很好,現在你已經寫了一個腳本輸出"Hello World",就像你作為一個開發者的職業生涯中已經做過一百萬次列印"Hello World"。現在是時候修改應用的圖標了。

從你的腳本中找到應用圖標

將所有的應用圖標都添加到Images.xcassets中,將每個圖標拖到合適的AppIcon尺寸上:

同時,你也要將debugRibbon.png 和 betaRibbon.png 放在和.xcodeproj同級的目錄文件中。

為了使用icons,你的腳本需要知道致謝icons在哪裡。用下面的代碼代替你之前寫的腳本:

echo "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" echo "${SRCROOT}"

第一行列印在你運行你的項目後的問佳佳路徑,包含最後一個圖標。
第二行列印項目文件所在的文件夾路徑。

這是通過使用Xcode的一些構建設置的變數。

運行你的項目並查看構建報告。你將會看到描述你的工程最後產品的文件路徑。在它下面,你將會看到你的項目工程所在的文件路徑:

定位到第一個文件夾,查看它所在的位置;你將看到你的app中所有的東西,包括所有的app圖標。這裡面是存放ImageMagick修改後的圖標的地方。

通過在Application icon點擊右鍵,然後選擇Show Package Contents,你將看到這些圖標。現在他們都是看起來非常正常的!

現在定位到列印的第二個文件路徑。這個僅僅是你正常工程項目的文件夾。因此,應用圖標在哪裡呢?

前往有著相同名字的Llama Trot文件。在這裡面你將看到Images.xcassets。打開Images.xcassets,你將會看到另外一個叫AppIcon.appiconset的文件。

應用圖標就在這個文件夾中,你將通過ImageMagick來修改它們。假設你將你的工程保存到桌面上命名為Llama
Trot,那麼圖標的路徑為~/Desktop/Llama\ Trot/Llama\
Trot/Images.xcassets/AppIcon.appiconset

將腳本的最後一行替換為下面的代碼,你將會得到原始圖標的我完整路徑:

IFS=$'\n' echo $(find ${SRCROOT} -name "[email protected]")

第一行設置IFS-internal欄位分隔符換行符。如果你不這樣做,第二行就會失敗,因為文件名,Llama Trot,包含一個空格。如果你好奇沒有第一行發生了什麼,你可以將其刪除後嘗試一下。
第二行中此命令$ { SRCROOT }文件夾遞歸搜索文件[email protected]

運行項目,你將會看到 AppIcon60x60@2x 完整的路徑被列印出來:

將它們放在一起

困難的事情就要結束了。現在是時候將它們放在一起,通過你的腳本來修改應用的圖標。你將首先開始修改[email protected],然後處理所有的應用圖標。這就意味著你需要在Retina@2x的模擬器或者6Plus上測試。

通過結合ImageMagick的技術和你以前的腳本,最終你會得到下面的腳本。確保更新相應的腳本:

IFS=$'\n' #1 PATH=${PATH}:/usr/local/bin #2 TARGET_PATH="${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/[email protected]" BASE_IMAGE_PATH=$(find ${SRCROOT} -name "[email protected]") #3 convert betaRibbon.png -resize 120x120 resizedBetaRibbon.png #4 convert ${BASE_IMAGE_PATH} -fill white -font Times-Bold -pointsize 18 -gravity south -annotate 0 "Hello World" - | composite resizedBetaRibbon.png - ${TARGET_PATH}

現在來分析發生了什麼:

如果你省略第一行,編譯將失敗。你的終端有一個叫PATH的變數,來存儲一些默認的本地腳本。對於所有的命令終端認為這是第一個,默認並
不是Unix的一部分。這允許任何命令位於一個目錄路徑運行沒有指定完整的命令的位置。Xcode需要將相同的PATH變數分享給你的終端。這行添加
/user/local/bin到PATH變數,Homebrew安裝的地方。
接下來的兩行,獲取本地的應用圖標,然後分別將該路徑保存到TARGET_PATH 和 BASE_IMAGE_PATH 變數中
這行是將betaRibbon.png的圖標的尺寸改為合適的大小;
最後一行做了兩件事情。首先,它在原始的應用圖標上添加"Hello World"文本。然後該腳本執行合成的功能--將有beta標識的圖片放置在其上面。然後將合成的圖片保存為應用的圖標。

提示:應用程序圖標名字不是任意的。在最終的產品,應用程序圖標的名稱必須像[email protected]。Xcode使用此命名約定來確定使用哪個圖標根據設備使用。
運行項目,在你的設備的主屏幕中看你的應用的圖標;吐過你是在模擬其中,可以按Cmd + Shift + H 切換到主屏幕。你將會看到一個修改過的圖標

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:333
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:374
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:610
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:31
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:107
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:940
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:739
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:802
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:510
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:371