㈠ shell腳本怎樣讀取文件的值,並賦值給變數
在sell腳本中,讀取鍵盤輸入的內容並將其賦值給shell變數的命令為:
read -p "input a val:" val echo $val
read - 從標准輸入讀取數值。這個 read 內部命令被用來從標准輸入讀取單行數據。這個命令可以用來讀取鍵盤輸入,當使用 重定向的時候,讀取文件中的一行數據。
它的語法形式一般是:
read [-options] [variable...]
(1)shell使用文件中的變數的值擴展閱讀:
Shell是一種腳本語言,常見的腳本解釋器有:
bash:是linux標准默認的shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的縮寫,內部命令一共有40個。
sh: 由Steve Bourne開發,是Bourne Shell的縮寫,sh 是Unix 標准默認的shell。
常見的編程語言分為兩類:一個是編譯型語言,如:c/c++/java等,它們遠行前全部一起要經過編譯器的編譯。
㈡ 如何在shell腳本中使用變數
系統定義的變數:
這些變數由操作系統(Linux)自身創建並維護,通常它們以大寫字母定義,我們可以通過命令「$ set」來查看這些變數。下面列出了部分系統定義的變數:
系統定義的變數
意義
BASH=/bin/bash
Bash Shell 名稱
BASH_VERSION=4.1.2(1)
Bash 版本
COLUMNS=80
你的屏幕寬度(列數)
HOME=/home/linuxtechi
用戶家目錄
LINES=25
你的屏幕高度(行數)
LOGNAME=LinuxTechi
當前登錄用戶的名字
OSTYPE=Linux
操作系統類型
PATH=/usr/bin:/sbin:/bin:/usr/sbin
可執行文件搜索路徑
PS1=[\u@\h \W]\$
命令行提示符
PWD=/home/linuxtechi
當前工作目錄
SHELL=/bin/bash
Shell 名稱
USERNAME=linuxtechi
當前登錄的用戶名
要列印以上變數的值,可以使用echo command命令,如下:
# echo $HOME# echo $USERNAME
我們可以通過在環境變數名前前置一個美元符號來從你的腳本里輸入環境變數。請看下面腳本演示:
$ cat myscript #!/bin/bash# display user information from the system.echo 「User info for userid: $USER」echo UID: $UIDecho HOME: $HOME
注意:echo命令中的環境變數在腳本運行時會被它們的值替代。同時注意,我們可以再第一個字元串的雙引號中放置$USER系統變數,而shell腳本仍然可以明白我們的意思。然而,該方法有一個缺點。看下面這個例子:
$ echo 「The cost of the item is $15」The cost of the item is 5
很明顯,那不是我們說希望的。無論何時,當腳本遇見引號中的美元符號時,它都會認為你是在調用一個變數。在本例中,該腳本試著顯示變數$1(而這個變數並沒有定義),然後顯示數字5。要顯示實際上的美元符號,你必須前置一個反斜線字元:
$ echo 「The cost of the item is \$15」The cost of the item is $15
那樣好多了。反斜線允許shell腳本將美元符號解釋成為實際的美元符號,而不是變數。
用戶定義的變數:
這些變數由用戶定義。shell腳本允許我們在腳本中設置並使用我們自己的變數。設置變數允許你臨時存儲數據並在腳本中使用,讓shell腳本看起來像一個真正的計算機程序。
用戶變數可以是任何不超過20個的字母、數字或者下劃線字元的文本字元串(LCTT 譯註:變數只能以字母或下劃線開頭)。用戶變數是大小寫敏感的,因此,變數Var1和變數var1是不同的變數。這個小規則常常讓新手編寫腳本時麻煩重重。
我們可以通過等於號為變數賦值。變數,等於號和值(對於新手又是個麻煩的地方)之間不能有空格。下面是幾個給用戶變數賦值的例子:
var1=10var2=-57var3=testingvar4=「still more testing」
shell腳本為變數值自動確定數據類型。shell腳本內定義的變數會在腳本運行時保留它們的值,當腳本完成後則刪除這些值。
就像系統變數一樣,用戶變數也可以使用美元符號來調用:
$ cat test3#!/bin/bash# testing variablesdays=10guest="Katie"echo "$guest checked in $days days ago"days=5guest="Jessica"echo "$guest checked in $days days ago"$
運行腳本會產生以下輸出:
$ chmod u+x test3$ ./test3Katie checked in 10 days agoJessica checked in 5 days ago$
每次變數被調用,它都會變成了當前分配給它的值。有一點很重要,當調用一個變數值時,你使用美元符號,但是當為一個變數分配一個值時,你不能用美元符號。下面用例子來說明:
$ cat test4#!/bin/bash# assigning a variable value to another variablevalue1=10value2=$value1echo The resulting value is $value2$
當你使用賦值語句中value1變數的值時,你仍然必須使用美元符號。這段代碼產生了如下輸出:
$ chmod u+x test4$ ./test4The resulting value is 10$
如果你忘了美元符號,而又讓value2賦值行看起來像這樣:
value2=value1
你會獲得下面的輸出:
$ ./test4 The resulting value is value1$
沒有美元符號,shell解釋變數名為普通文本字元串,這極有可能不是你想要的。
在shell變數中使用反引號(`):
反引號允許你將shell命令的輸出賦值給變數。雖然這似乎沒什麼大不了,但它是腳本編程中主要的構建基塊。你必須使用反引號將整個命令行包含起來:
**testing=`date`**
shell會在反引號中運行命令,然後將輸出結果賦值給變數testing。下面的例子給出了如何使用一個常規shell命令的輸出結果來創建一個變數:
$ cat test5#!/bin/bash# using the backtick charactertesting=`date`echo "The date and time are: " $testing$
變數testing接收來自date命令的輸出結果,而它又在echo語句中被調用。運行腳本會產生如下輸出:
$ chmod u+x test5$ ./test5The date and time are: Mon Jan 31 20:23:25 EDT 2011
註:在bash中,你也可以選用$(...)語法來替換反引號(`),它有個優點就是可以重用(re-entrant)。
例:
$ echo " Today』s date & time is :" $(date)Today』s date & time is : Sun Jul 27 16:26:56 IST 2014
㈢ 如何在shell腳本中使用變數
變數的定義,只能以字母和下劃線開始,區分大小寫,可以包含數字 字母下劃線.詳見官方手冊
復制代碼代碼如下:
[root@svn shell_example]# yourname='Linux'
[root@svn shell_example]# echo $yourname
Linux
[root@svn shell_example]# YourName="linux"
[root@svn shell_example]# echo "The variable is $YourName"
The variable is linux
獲取當前日期的腳本,常用在日誌切割中,為了區分每天的日誌文件
如下 生成2015年4月27日
復制代碼代碼如下:
[root@svn shell_example]# echo `date +%Y%m%d`
20150427
[root@svn shell_example]# cat today.sh
#!/bin/bash
TODAY=`date +%A`
YEAR=`date +%Y年%m月%d日`
echo "今天是 $YEAR, $TODAY"
[root@svn shell_example]# sh today.sh
今天是 2015年04月27日, 星期一
從鍵盤獲取用戶的輸入,如下腳本執行後腳本直接等待用過戶輸入,直到用戶輸入完成 並回車,腳本獲取到用戶的輸入並將結果列印出來.
復制代碼代碼如下:
[root@svn shell_example]# cat var.sh
#!/bin/bash
read myvar
echo "myvar is $myvar
執行結果如下
[root@svn shell_example]# sh var.sh
Linux
myvar is Linux
[/code]
帶提示信息的從鍵盤獲取用戶輸入
復制代碼代碼如下:
#!/bin/bash
#從鍵盤獲取用戶信息,並列印出來.
echo -n 'Enter Your Name:' #-n 選項表示不換行.
read name
echo "Hi $name"
sh name.sh
Enter Your Name:linux
Hi linux
升級版腳本,此腳本成功的接受了用戶的2個參數 姓和名字,並將輸入列印在屏幕上
代碼內容如下
復制代碼代碼如下:
[root@svn shell_example]# cat firstname.sh
#!/bin/bash
pw="123"
echo
echo "+========用戶登錄=========+"
echo
echo -n "請輸入您的用戶名: "
read fname lname
echo -n "請輸入您的密碼: "
read passwd
echo "尊敬的會員$fname $lname,您好!您已登錄成功"
[root@svn shell_example]# sh firstname.sh
㈣ linux腳本文件中怎麼從文件中讀取數據並賦值給變數
linux腳本文件中,從文件中讀取數據並賦值給變數的操作方法和步驟如下:
1、首先,創建一個名為shell.sh的文件:vi shell.sh,如下圖所示。
㈤ shell如何讀取文件中變數值
|1
2
3
4
5
6
#!/bin/bash
#使用方法:內./script.sh filename
a=$(sed -n '$p' $1 |容 awk -F"," '{print $1}')
b=$(sed -n '1!P;N;$q;D' $1 | awk -F"," '{print $1}')
echo $a
echo $b