使用read命令,例如
創(chuàng)新互聯(lián)建站堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的北戴河網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
read -p "請輸入:" input
這樣用戶的輸入就會賦予變量input
在sell腳本中,讀取鍵盤輸入的內(nèi)容并將其賦值給shell變量的命令為:
read?-p?"input?a?val:"?val?echo?$val
read - 從標準輸入讀取數(shù)值。這個 read 內(nèi)部命令被用來從標準輸入讀取單行數(shù)據(jù)。這個命令可以用來讀取鍵盤輸入,當使用 重定向的時候,讀取文件中的一行數(shù)據(jù)。
它的語法形式一般是:
read?[-options]?[variable...]
這里的 options 是下面列出的可用選項中的一個或多個,且 variable 是用來存儲輸入數(shù)值的一個或多個變量名。 如果沒有提供變量名,shell 變量 REPLY 會包含數(shù)據(jù)行。
基本上,read 會把來自標準輸入的字段賦值給具體的變量。
shell的概念:
殼層(英語:Shell)在計算機科學中,是指“提供用戶使用界面”的軟件,通常指的是命令行界面的解析器。一般來說,這個詞是指操作系統(tǒng)中,提供訪問內(nèi)核所提供之服務(wù)的程序。不過這個詞也拿來指應用軟件,或是任何在特定組件外圍的軟件,例如瀏覽器或電子郵件軟件是HTML排版引擎的shell。Shell這個詞是來自于操作系統(tǒng)(內(nèi)核)與用戶界面的外層界面。通常將殼層分為兩類:命令行與圖形界面。命令行殼層提供一個命令行界面(CLI);而圖形殼層提供一個圖形用戶界面(GUI)。
百度或者GoogleXX語言怎么調(diào)用外部程序就有答案了。來一個簡單的:百度百科systemLinux/Unix函數(shù)函數(shù)詳解(執(zhí)行shell命令)相關(guān)函數(shù)fork,execve,waitpid,popen表頭文件#include定義函數(shù)intsystem(constchar*string);函數(shù)說明system()會調(diào)用fork()產(chǎn)生子進程,由子進程來調(diào)用/bin/sh-cstring來執(zhí)行參數(shù)string字符串所代表的命令,此命令執(zhí)行完后隨即返回原調(diào)用的進程。在調(diào)用system()期間SIGCHLD信號會被暫時擱置,SIGINT和SIGQUIT信號則會被忽略。返回值如果fork()失敗返回-1:出現(xiàn)錯誤如果exec()失敗,表示不能執(zhí)行Shell,返回值相當于Shell執(zhí)行了exit(127)如果執(zhí)行成功則返回子Shell的終止狀態(tài)如果system()在調(diào)用/bin/sh時失敗則返回127,其他失敗原因返回-1。若參數(shù)string為空指針(NULL),則返回非零值;。如果system()調(diào)用成功則最后會返回執(zhí)行shell命令后的返回值,但是此返回值也有可能為system()調(diào)用/bin/sh失敗所返回的127,因此最好能再檢查errno來確認執(zhí)行成功。附加說明在編寫具有SUID/SGID權(quán)限的程序時請勿使用system(),system()會繼承環(huán)境變量,通過環(huán)境變量可能會造成系統(tǒng)安全的問題。范例#includemain(){system(“l(fā)s-al/etc/passwd/etc/shadow”);}執(zhí)行結(jié)果:-rw-r--r--1rootroot705Sep313:52/etc/passwd-r---------1rootroot572Sep215:34/etc/shado例2:chartmp[];sprintf(tmp,"/bin/mount-tvfat%s/mnt/usb",dev);system(tmp);其中dev是/dev/sda1.與exec的區(qū)別1、system()和exec()都可以執(zhí)行進程外的命令,system是在原進程上開辟了一個新的進程,但是exec是用新進程(命令)覆蓋了原有的進程2、system()和exec()都有能產(chǎn)生返回值,system的返回值并不影響原有進程,但是exec的返回值影響了原進程
Linux read命令用于從標準輸入讀取數(shù)值。
read 內(nèi)部命令被用來從標準輸入讀取單行數(shù)據(jù)。這個命令可以用來讀取鍵盤輸入,當使用重定向的時候,可以讀取文件中的一行數(shù)據(jù)。
參數(shù)說明:
1、簡單讀取
測試結(jié)果為:
2、-p 參數(shù),允許在 read 命令行中直接指定一個提示。
測試結(jié)果為:
3、-t 參數(shù)指定 read 命令等待輸入的秒數(shù),當計時滿時,read命令返回一個非零退出狀態(tài)。
執(zhí)行程序不輸入,等待 5 秒后:
4、除了輸入時間計時,還可以使用 -n 參數(shù)設(shè)置 read 命令計數(shù)輸入的字符。當輸入的字符數(shù)目達到預定數(shù)目時,自動退出,并將輸入的數(shù)據(jù)賦值給變量。
該例子使用了-n 選項,后接數(shù)值 1,指示 read 命令只要接受到一個字符就退出。只要按下一個字符進行回答,read 命令立即接受輸入并將其傳給變量,無需按回車鍵。
只接收 2 個輸入就退出:
執(zhí)行程序輸入兩個字符:
5、 -s 選項能夠使 read 命令中輸入的數(shù)據(jù)不顯示在命令終端上(實際上,數(shù)據(jù)是顯示的,只是 read 命令將文本顏色設(shè)置成與背景相同的顏色)。輸入密碼常用這個選項。
執(zhí)行程序輸入密碼后是不顯示的:
6.讀取文件
每次調(diào)用 read 命令都會讀取文件中的 "一行" 文本。當文件沒有可讀的行時,read 命令將以非零狀態(tài)退出。
通過什么樣的方法將文件中的數(shù)據(jù)傳給 read 呢?使用 cat 命令并通過管道將結(jié)果直接傳送給包含 read 命令的 while 命令。
測試文件 test.txt 內(nèi)容如下:
測試代碼:
執(zhí)行結(jié)果為:
使用 -e 參數(shù),以下實例輸入字符 a 后按下 Tab 鍵就會輸出相關(guān)的文件名(該目錄存在的):
提供一個輸入按鍵應用程序?qū)嵗?,你參考一下?/p>
#include stdio.h
#include stdlib.h
#include unistd.h
#include sys/ioctl.h
#include sys/types.h
#include sys/stat.h
#include fcntl.h
#include sys/select.h
#include sys/time.h
#include errno.h
#include linux/input.h
int main(void)
{
int buttons_fd;
int key_value,i=0,count;
struct input_event ev_key;
buttons_fd = open("/dev/input/event0", O_RDWR);
if (buttons_fd 0) {
perror("open device buttons");
exit(1);
}
for (;;) {
count = read(buttons_fd,ev_key,sizeof(struct input_event));
for(i=0; i(int)count/sizeof(struct input_event); i++)
if(EV_KEY==ev_key.type)
printf("type:%d,code:%d,value:%d\n", ev_key.type,ev_key.code-1,ev_key.value);
if(EV_SYN==ev_key.type)
printf("syn event\n\n");
}
close(buttons_fd);
return 0;
}