文章目錄
- 一、實驗目的
- 二、實驗要求
- 三、實驗內容
- 1、通配符的使用
- 2、重定向
- 3、管道
- 4、shell變量
- 5、建立下面的腳本,運行并分析輸出結果,并給出代碼注釋。
- 6、編寫腳本
一、實驗目的
1.為文件擴展名使用通配符
2.標準輸入、標準輸出和標準錯誤的重定向
3.使用管道將一個進程的輸出作為輸入提供給另一個進程。
4.執行命令分組和行繼續
5.編寫shell 腳本。
二、實驗要求
1、管道(pipe-line)的使用
執行格式: command1|command2
功能:將command1的執行結果送到command2 作為輸入
2、標準輸入控制
執行格式: command-line<file 將file作為command-line的輸入
3、標準輸出控制
執行格式一: command>filename
功能:將command的執行結果送至指定的filename中
執行格式二: command>!filename
功能:同上,若filename文件已存在,則強迫重寫
執行格式三:command>>filename
功能:將command 的執行結果,附加(append)到filename
4、shell腳本的調試方法:
(1)輸入重定向到shell腳本
格式:$ bash < 腳本名
(2)以腳本名作為bash參數
格式:$ bash 腳本名 [參數]
(3)在提示符下直接執行
方法:先利用chmod命令將腳本文件設置為可執行權限;然后,將該腳本所在的目錄添加到命令搜索路徑中
(4)將shell腳本的權限設置為可執行,然后在提示符下直接執行
方法:
先利用chmod命令將腳本文件設置為可執行權限
三、實驗內容
1、通配符的使用
(1)進入/etc目錄并且將此處所有文件以列表顯示
$ cd /etc
$ ls(或者$ echo *)
(2)要求用帶有通配符的ls命令來顯示文件名,實現:
-以conf結束
ls *conf
-以d 或D開始
ls [dD]*
-在文件名的第五個位置包括一個o
ls -d ????o*
-包含單詞tab
ls -d *tab*
-以數字結尾
ls -d *[0~9]
-不以數字結尾
ls -d *[!0~9]
(3)如果你執行命令ls -d ?[!y]*[e-f]將會發生什么情況?能與之匹配的最短文件名是什么?執行這些命令來驗證你的答案。
第一個位置匹配任意一個字符,第二個位置字符不是y,第二個位置之后到最后一個位置之間任意字符串,最后一個位置字符是e或者f。
2、重定向
(1)使用cat命令和指令來創建一個包含幾行文本名為junk的文件。
(2)使用重定向junk文件中追加幾行文本。然后查看junk文件的內容并且檢查你剛剛所創建的文本是否都存在。
3、管道
(1)統計你當前目錄所有文件的數目。使用管道,而不是手動地統計所有文件
(2)ls > tempfile ; wc -l tempfile是否和你剛剛使用的管道功能相同?為什么或者為什么不?
不同,管道功能不需要新的文件,本題的操作創造了新的文件tempfile。
(3)將多個用戶文件聯合為一個大文件。
4、shell變量
(1)顯示由你當前進程環境所定義的所有變量。并且顯示出當前輸出的所有變量。
$ set
(2)創建一個變量x并初始化值為10。檢查這個變量的值。再次,顯示當前進程環境的所有變量。
(3)創建一個subshell.查看變量x在subshell下的值是什么?
(4)將x設置為500并返回到父進程。當前x的值是什么?為什么?
x=10的值保存在父進程中,x=500的值保存在了子進程中,互不繼承。
(5)確保子進程繼承了x。如何實現?
5、建立下面的腳本,運行并分析輸出結果,并給出代碼注釋。
(1)ex1
#!/bin/bash //所使用shell的絕對路徑名,表示由bash腳本編寫,從而應調用相應的解釋程序予以執行
#shell special character //“#”開頭正文行表注釋
echo "current directory is `pwd`" //顯示current directory is 當前目錄的絕對路徑
echo "current directory is 'pwd'" //顯示current directory is 'pwd'
echo "home directory is $HOME" //顯示home directory is 當前用戶
echo "file*.?" //顯示file*.?
today=`date` //將命令date賦給變量today
echo Today is :$today //顯示Today is :此刻的日期
ls ex* //顯示當前目錄中文件名是以ex打頭的文件
(2)ex2
#!/bin/bash
#bash script programming
if test $# == 0 //參數個數為0
thenls -l|grep '^d' //顯示當前目錄中的所有文件夾信息
elsefor idols -l $i|grep '^d' //顯示各個參數目錄中的所有文件夾信息done
fi
(3)ex3
case $1 in //選擇 -b或者-s如果什么都不選就進入*)
-b) count=`grep ^b $2 | wc -l`
echo "The number of lines in $2 that start with b is $count.";;
//顯示The number of lines in 給出的文件 that start with b is 第幾行
-s) count=`grep ^s $2 | wc -l`
echo "The number of lines in $2 that start with s is $count.";;
//顯示The number of lines in 給出的文件 that start with s is 第幾行
*) echo "That option is not recognized.";;
//顯示That option is not recognized.
esac //關閉case
6、編寫腳本
(1)編寫shell 腳本,計算1-100 的和;
(2)編寫shell 腳本,要求輸入一個數字,然后計算出從1 到輸入數字的和,要求,如果輸入的數字小于1,則重新輸入,直到輸入正確的數字為止;
(3)編寫shell 腳本,把/home目錄下的所有目錄拷貝到/tmp目錄下;