shell 十三问
•1) 為何叫做 shell ?在介紹 shell 是甚麼東西之前,不妨讓我們重新檢視使用者與電腦系統的關係:圖(FIXME)我們知道電腦的運作不能離開硬體,但使用者卻無法直接對硬體作驅動,硬體的驅動只能透過一個稱為"作業系統(Operating System)"的軟體來控管,事實上,我們每天所談的 linux ,嚴格來說只是一個作業系統,我們稱之為"核心(kernel)"。
然而,從使用者的角度來說,使用者也沒辦法直接操作 kernel ,而是透過 kernel 的"外殼"程式,也就是所謂的 shell ,來與 kernel 溝通。
這也正是 kernel 跟 shell 的形像命名關係。
如圖:圖(FIXME)從技術角度來說,shell 是一個使用者與系統的互動界面(interface),主要是讓使用者透過命令行(command line)來使用系統以完成工作。
因此,shell 的最簡單的定義就是---命令解譯器(Command Interpreter):* 將使用者的命令翻譯給核心處理,* 同時,將核心處理結果翻譯給使用者。
每次當我們完成系統登入(log in),我們就取得一個互動模式的 shell ,也稱為 login shell 或 primary shell。
若從行程(process)角度來說,我們在 shell 所下達的命令,均是 shell 所產生的子行程。
這現像,我們暫可稱之為 fork 。
如果是執行腳本(shell script)的話,腳本中的命令則是由另外一個非互動模式的子 shell (sub shell)來執行的。
也就是 primary shell 產生 sub shell 的行程,sub shell 再產生 script 中所有命令的行程。
(關於行程,我們日後有機會再補充。
)這裡,我們必須知道:kernel 與 shell 是不同的兩套軟體,而且都是可以被替換的:* 不同的作業系統使用不同的 kernel ,* 而在同一個 kernel 之上,也可使用不同的 shell 。
在 linux 的預設系統中,通常都可以找到好幾種不同的 shell ,且通常會被列於如下檔案裡: /etc/shells不同的 shell 有著不同的功能,且也彼此各異、或說"大同小異"。
常見的 shell 主要分為兩大主流:sh:burne shell (sh)burne again shell (bash)csh:c shell (csh)tc shell (tcsh)korn shell (ksh)(FIXME)大部份的 Linux 系統的預設 shell 都是 bash ,其原因大致如下兩點:* 自由軟體* 功能強大bash 是 gnu project 最成功的產品之一,自推出以來深受廣大 Unix 用戶喜愛,且也逐漸成為不少組織的系統標準。
•2) shell prompt(PS1) 與 Carriage Return(CR) 的關係?當你成功登錄進一個文字界面之後,大部份情形下,你會在熒幕上看到一個不斷閃爍的方塊或底線(視不同版本而別),我們稱之為*遊標*(cursor)。
遊標的作用就是告訴你接下來你從鍵盤輸入的按鍵所插入的位置,且每輸入一鍵遊標便向右邊移動一個格子,若連續輸入太多的話,則自動接在下一行輸入。
假如你剛完成登錄還沒輸入任何按鍵之前,你所看到的遊標所在位置的同一行的左邊部份,我們稱之為*提示符號*(prompt)。
提示符號的格式或因不同系統版本而各有不同,在 Linux 上,只需留意最接近遊標的一個可見的提示符號,通常是如下兩者之一:$:給一般使用者帳號使用#:給 root (管理員)帳號使用事實上,shell prompt 的意思很簡單:* 是 shell 告訴使用者:您現在可以輸入命令行了。
我們可以說,使用者只有在得到 shell prompt 才能打命令行,而 cursor 是指示鍵盤在命令行所輸入的位置,使用者每輸入一個鍵,cursor 就往後移動一格,直到碰到命令行讀進C R(Carriage R eturn,由 Enter 鍵產生)字符為止。
C R的意思也很簡單:* 是使用者告訴shell:老兄你可以執行我的命令行了。
嚴格來說:* 所謂的命令行,就是在 shell prompt 與 C R字符之間所輸入的文字。
(思考:為何我們這裡堅持使用 C R字符而不說 Enter 鍵呢?答案在後面的學習中揭曉。
)不同的命令可接受的命令行格式或有不同,一般情況下,一個標準的命令行格式為如下所列:command-name options argument若從技術細節來看,shell 會依據IFS(Internal Field Seperator) 將 command line 所輸入的文字給拆解為"字段"(w ord)。
然後再針對特殊字符(meta)先作處理,最後再重組整行 command line 。
(注意:請務必理解上兩句話的意思,我們日後的學習中會常回到這裡思考。
)其中的 IFS 是 shell 預設使用的欄位分隔符號,可以由一個及多個如下按鍵組成:* 空白鍵(W hite Space)* 表格鍵(T ab)* 回車鍵(Enter)系統可接受的命令名稱(command-name)可以從如下途逕獲得:* 明確路逕所指定的外部命令* 命令別名(alias)* 自定功能(function)* shell 內建命令(built-in)* $PATH之下的外部命令每一個命令行均必需含用命令名稱,這是不能缺少的。
•3) 別人 echo、你也 echo ,是問 echo 知多少?承接上一章所介紹的 command line ,這裡我們用 echo 這個命令加以進一步說明。
溫習---標準的 command line 包含三個部件:* command_name option argumentecho 是一個非常簡單、直接的 Linux 命令:* 將 argument 送出至標準輸出(S TD OU T),通常就是在監視器(monitor)上輸出。
為了更好理解,不如先讓我們先跑一下 echo 命令好了:$ echo$你會發現只有一個空白行,然後又回到 shell prompt 上了。
這是因為 echo 在預設上,在顯示完 argument 之後,還會送出一個換行符號(ne w-line charactor)。
但是上面的 command 並沒任何的 argument ,那結果就只剩一個換行符號了...若你要取消這個換行符號,可利用 echo 的 -n option :$ echo -n$不妨讓我們回到 command line 的概念上來討論上例的 echo 命令好了:* command line 只有 command_name(echo) 及option(-n),並沒有任何argument 。
要想看看echo 的 argument ,那還不簡單﹗接下來,你可試試如下的輸入:$ echo first linefirst line$ echo -n first linefirst line $於上兩個 echo 命令中,你會發現 argument 的部份顯示在你的熒幕,而換行符號則視 -n option 的有無而別。
很明顯的,第二個 echo 由於換行符號被取消了,接下來的 shell prompt 就接在輸出結果同一行了...^_^事實上,echo 除了-n options 之外,常用選項還有:-e :啟用反斜線控制字符的轉換(參考下表)-E:關閉反斜線控制字符的轉換(預設如此)-n :取消行末之換行符號(與 -e 選項下的 \c 字符同意)關於 echo 命令所支援的反斜線控制字符如下表:\a:A LE RT / B ELL (從系統喇叭送出鈴聲)\b:BA C K S PA CE ,也就是向左退格鍵\c:取消行末之換行符號\E:ESC AP E,跳脫鍵\f:FO R MFEE D,換頁字符\n:N E W LI N E,換行字符\r:R E T U RN,回車鍵\t:TAB,表格跳位鍵\v:V E RT IC A L TAB,垂直表格跳位鍵\n:A SCII 八進位編碼(以 x 開首為十六進位)\\:反斜線本身或許,我們可以透過實例來了解 echo 的選項及控制字符:例一:$ echo -e "a\tb\tc\nd\te\tf"a b cd e f上例運用 \t 來區隔abc 還有 def ,及用 \n 將 def 換至下一行。
例二:$ echo -e "\141\011\142\011\143\012\144\011\145\011\146"a b cd e f與例一的結果一樣,只是使用 A SCII 八進位編碼。
例三:$ echo -e "\x61\x09\x62\x09\x63\x0a\x64\x09\x65\x09\x66"a b cd e f與例二差不多,只是這次換用 A SCII 十六進位編碼。
例四:$ echo -ne "a\tb\tc\nd\te\bf\a"a b cd f $因為 e 字母後面是退格鍵(\b),因此輸出結果就沒有 e 了。
在結束時聽到一聲鈴嚮,那是 \a 的傑作﹗由於同時使用了-n 選項,因此 shell prompt 緊接在第二行之後。
若你不用 -n 的話,那你在 \a 後再加個 \c ,也是同樣的效果。
事實上,在日後的 shell 操作及shell script 設計上,echo 命令是最常被使用的命令之一。
比方說,用 echo 來檢查變量值:$ A=B$ echo $AB$ echo $?好了,更多的關於 command line 的格式,以及echo 命令的選項,就請您自行多加練習、運用了...•4) " "(雙引號) 與 ' '(單引號)差在哪?還是回到我們的 command line 來吧...經過前面兩章的學習,應該很清楚當你在 shell prompt 後面敲打鍵盤、直到按下 Enter 的時候,你輸入的文字就是 command line 了,然後 shell 才會以行程的方式執行你所交給它的命令。
但是,你又可知道:你在 command line 輸入的每一個文字,對 shell 來說,是有類別之分的呢?簡單而言(我不敢說這是精確的定議,註一),command line 的每一個 charactor ,分為如下兩種:* literal:也就是普通純文字,對 shell 來說沒特殊功能。
shell常见问题
非常好的十道Linuxshell脚本面试题1、编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下#/bin/sh#Programm :# Using for move currently directory to /tmpfor FileName in `ls -l | awk '$5>10240 {print $9}'`domv $FileName /tmpdonels -al /tmpecho "Done! "2、编写shell脚本获取本机的网络地址。
比如:本机的ip地址是:,那么它的网络地址是方法一:#!/bin/bash#This script print ip and networkfile="/etc/sysconfig/network-scripts/ifcfg-eth0"if [ -f $file ] ;thenIP=`grep "IPADDR" $file|awk -F"=" '{ print $2 }'`MASK=`grep "NETMASK" $file|awk -F"=" '{ print $2 }'`echo "$IP/$MASK"exit 1fi方法二:#!/bin/bash#This programm will printf ip/network#IP=`ifconfig eth0 |grep 'inet ' |sed 's/^.* 's/ Bcast.*$ "$IP/$NETMASK"exit3、用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目录下。
参考程序:#!/bin/shFILENAME=echo “Input file name:”read FILENAMEif [ -c "$FILENAME" ]thencp $FILENAME /devfi4.请为下列shell程序添加注释,并说明程序的功能和调用方法:#!/bin/sh## /etc/## Start/stop/restart the Apache web server.## To make Apache start automatically at boot, make this# file executable: chmod 755 /etc/#case "$1" in'start')/usr/sbin/apachectl start ;;'stop')/usr/sbin/apachectl stop ;;'restart')/usr/sbin/apachectl restart ;;*)echo "usage $0 start|stop|restart" ;;esac参考答案:(1)程序注释#!/bin/sh 定义实用的shell## /etc/ 注释行,凡是以星号开始的行均为注释行。
Shell 脚本面试题及答案
Shell 脚本面试题及答案一、Shell脚本是什么、它是必需的吗?一个Shell脚本是一个文本文件,包含一个或多个命令。
作为系统管理员,我们经常需要使用多个命令来完成一项任务,我们可以添加这些所有命令在一个文本文件(Shell 脚本)来完成这些日常工作任务。
二、什么是默认登录shell,如何改变指定用户的登录shell?在Linux操作系统,“/bin/bash”是默认登录shell,是在创建用户时分配的。
使用chsh命令可以改变默认的shell。
三、可以在shell脚本中使用哪些类型的变量?在shell脚本,我们可以使用两种类型的变量:①系统定义变量;②用户定义变量。
系统变量:是由系统系统自己创建的。
这些变量通常由大写字母组成,可以通过“set”命令查看。
用户变量:是由系统用户来生成和定义,变量的值可以通过命令“echo $<变量名>”查看。
四、如何将标准输出和错误输出同时重定向到同一位置?这里有两个方法来实现:方法一:2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )方法二:&> (如# ls /usr/share/doc &> out.txt )五、shell脚本中“$?”标记的用途是什么?在写一个shell脚本时,如果你想要检查前一命令是否执行成功,在if条件中使用“$?”可以来检查前一命令的结束状态。
六、如何在后台运行脚本?在脚本后面添加“&”。
七、"chmod 500 script" 做什么?使脚本所有者拥有可执行权限。
八、">" 做什么?重定向输出流到文件或另一个流。
九、& 和 && 有什么区别& - 希望脚本在后台运行的时候使用它;&& - 当前一个脚本成功完成才执行后面的命令/脚本的时候使用它。
Linux Shell编程复习 题集附答案
Linux Shell编程复习题集附答案Linux Shell编程复习题集附答案在本文中,我们将为您提供一份包含答案的Linux Shell编程复习题集。
通过这些题目的练习,您可以加深对Linux Shell编程的理解,并巩固所学知识。
一、基础知识题1. 什么是Shell?Shell是一种解释性的编程语言,用户可以通过Shell来与操作系统进行交互和控制。
答案:Shell是一种解释器,它接收用户的命令并将其转换为操作系统能够理解和执行的形式。
2. 常见的Linux Shell有哪些?答案:常见的Linux Shell有Bash、Zsh、Csh、Ksh等。
3. 如何查看当前使用的Shell是哪种类型?答案:可以使用echo $0命令查看当前使用的Shell类型。
4. 什么是环境变量?如何查看当前的环境变量?答案:环境变量是用来存储系统运行时的配置信息的变量。
可以使用echo $变量名命令查看当前环境变量的值。
5. 如何定义一个变量并给其赋值?答案:可以使用变量名=值的形式来定义并赋值一个变量。
二、基本命令题1. 如何查看当前所在的目录?答案:可以使用pwd命令来查看当前所在的目录。
2. 如何列出当前目录下的所有文件和文件夹?答案:可以使用ls命令来列出当前目录下的所有文件和文件夹。
3. 如何切换到某个目录?答案:可以使用cd命令加上目标目录的路径来切换到某个目录。
例如:cd /path/to/directory。
4. 如何创建一个新的文件夹?答案:可以使用mkdir命令加上目录名来创建一个新的文件夹。
例如:mkdir new_folder。
5. 如何复制一个文件?答案:可以使用cp命令加上源文件和目标文件的路径来复制一个文件。
例如:cp source_file target_file。
三、条件控制题1. 编写一个Shell脚本,判断一个文件是否存在,若存在则输出文件存在,若不存在则输出文件不存在。
shell 练习题 答案
shell 练习题答案Shell练习题答案1. 问题描述:下面是一个Shell练习题,请写出你认为的答案,并提供相应的解释和思路。
2. 答案:在这道练习题中,我们将探讨一些常见的Shell编程问题。
问题一:如何在Shell中输出Hello World?答案一:可以使用echo命令来输出Hello World。
具体的命令如下:```echo "Hello World"```解释:echo命令用于在终端或脚本中输出文本,它会将文本原样输出到屏幕。
在这里,我们将输出的文本设为Hello World。
问题二:如何在Shell中创建一个变量,并将其输出?答案二:可以使用以下命令创建一个变量,并将其输出:```my_variable="Hello Shell"echo $my_variable```解释:在第一行中,我们通过将文本"Hello Shell"赋值给变量my_variable来创建一个变量。
在第二行,我们使用echo命令将该变量的内容输出到屏幕。
问题三:如何在Shell脚本中使用if语句?答案三:以下展示了一个使用if语句的示例:```shellif [ 1 -eq 1 ]; thenecho "1 equals 1"fi```解释:在这个例子中,我们使用了if [ 1 -eq 1 ]这个条件判断语句。
条件判断部分被放在方括号内,-eq表示比较两个数是否相等。
如果条件成立(即1等于1),则会执行echo命令输出"1 equals 1"。
问题四:如何在Shell中遍历一个数组?答案四:以下是一个遍历数组的示例:```shellmy_array=("Apple" "Banana" "Orange")for item in "${my_array[@]}"; doecho $itemdone```解释:在这个例子中,我们先创建了一个名为my_array的数组,其中包含了三个元素(Apple、Banana和Orange)。
shell十三问
己的环境。比如一个子shell可以改变它的工作目录,当它运行完后,其父shell的工作目录仍保持不变。
输入输出重定向
shell在执行程序前进行重定向。考虑下面两个例子,其中使用wc单词统计工具统计有五行的数据文件:
shell提供一个外设的保护层。当你启动一台基于UNIX的计算机时,UNIX的程序被调入计算机的内存里,直到你关机。这个程序叫做内
核(kernel),它执行许多底级和系统级的工作。内核有责任解释基本指令并将其送到处理器。内核也负责运行和调度进程,以及执行所
有的输入输出。内核是UNIX系统的心脏,内核有且只有一个。
shell都提供了相同的基本功能:
命令行解释功能
启动程序
输入输出重定向
管道连接
文件名置换
变量维护
环境控制
shell编程
命令行解释
当你登录进来,启动一个交互式的shell时,你会看到一个shell提示,通常是$,%或者#符号的形式。当你在提示符下敲进一行字符后,
(關於行程,我們日後有機會再補充。)
這裡,我們必須知道:kernel 與 shell 是不同的兩套軟體,而且都是可以被替換的:
* 不同的作業系統使用不同的 kernel ,
标准的一部分。它们是:
Bourne shell,由Stephen Bourne开发
Korn shell,由David Korn开发
C shell,由Bill Joy开发
shell的多样性使你可以选择最适合你或者你感到最亲近的界面。
SHELL十三问之十二:你要 if 还是 case 呢?
在bash shell中,我们可以如此修改上一段代码:
if comd1
then
comd2
comd3
else
comd4
comd5
fi
这也是我们在shell script中最常用到的if判断式:
当然,then或else后面,也可以再使用更进一层的条件判断式,这在shell script设计上很常见。
若有多项条件需要"依序"进行判断的话,那我们则可使用elif这样的keyword:
if comd1; then
comd2
elif comd3; then
comd4
else
comd5
fi
意思是说:
restart
;;
condrestart)
[ -f /var/lock/subsys/syslog ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart}"
exit 1
esac
(若你对positional parameter的印像已经模糊了,请重看第9章吧。)
fi
}
从例中,我们看得出来,最麻烦的部份是在于判断YN的值可能有好几种式样。
聪明的你或许会如此修改:
...
if echo "$YN" | grep -q '^[Yy]\([Ee][Ss]\)*$'
...
也就是用Regular Expression来简化代码。(我们有机会再来介绍RE)
shell 笔试题
shell 笔试题以下是一些常见的Shell脚本笔试题,你可以参考这些题目来检验自己的Shell脚本编程能力。
写出创建一个空目录的Shell命令。
答案是:mkdir directory_name如何在一个文件中查找某一特定字符串?答案是:grep "string" file_name如何将两个字符串连接起来?答案是:使用加号+,例如:string1="Hello, " string2="World!" result=$string1$string2如何使用Shell脚本在多个文件中查找某一特定字符串?答案是:使用for循环和grep命令,例如:bash`for file in *; do grep "string" $file; done`如何将一个字符串中的所有单词首字母大写?答案是:使用tr命令和正则表达式,例如:bash`echo "hello world" | tr '[:lower:]' '[:upper:]' | sed 's/\b\(.\)/\u\1/g'`如何使用Shell脚本将一个文件中的所有行反向输出?答案是:使用tac命令,例如:tac file_name如何使用Shell脚本将一个文件中的所有行连接成一个字符串?答案是:使用cat命令和重定向,例如:cat file_name > output_file如何使用Shell脚本将一个文件中的所有行按行反向排序?答案是:使用sort命令和-r选项,例如:sort -r file_name如何使用Shell脚本将一个文件中的所有行按行反向排序并将结果输出到一个新文件中?答案是:使用sort命令、重定向和-o选项,例如:sort -r file_name > output_file。
70个经典的shell脚本面试问题及解答
70个经典的shell脚本面试问题及解答选择了 70 个你可能遇到的 shell 脚本面试问题及解答。
了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。
在过去的几年里,我们注意到所有的linux 工作职位都要求脚本技能。
1) 如何向脚本传递参数 ?./script argument例子: 显示文件名称脚本 ?1 2 3 4 ./show.sh file1.txtcat show.sh#!/bin/bashecho $1(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。
)2) 如何在脚本中使用参数 ?第一个参数 : $1,第二个参数 : $2例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ?1 2 3 4 ./copy.sh file1.txt /tmp/cat copy.sh#!/bin/bashcp $1 $23) 如何计算传递进来的参数 ?$#4) 如何在脚本中获取脚本名称 ?$05) 如何检查之前的命令是否运行成功 ?$?6) 如何获取文件的最后一行 ?tail-17) 如何获取文件的第一行 ?head-18) 如何获取一个文件每一行的第三个元素 ?awk'{print $3}'9) 假如文件中每行第一个元素是 FIND ,如何获取第二个元素awk'{ if ($1 == "FIND") print $2}'10) 如何调试 bash 脚本将 -xv 参数加到 #!/bin/bash 后例子:#!/bin/bash –xv11) 举例如何写一个函数 ? ?1 2 3 function example {echo "Hello world!"}12) 如何向连接两个字符串 ? ?1 2 3 4 V1="Hello"V2="World"V3=${V1}${V2}echo $V3输出HelloWorld13) 如何进行两个整数相加 ? ?1 2 3 4 V1=1V2=2let V3=$V1+$V2echo $V3输出3据 @kashu 的意见,本题的更佳回答为:两个整数相加,还有若干种方法实现: ?1 2 3 4 5 6 7 A=5echo $(($A+$B)) # 方法 2echo $[$A+$B] # 方法 3expr $A + $B # 方法 4echo $A+$B | bc # 方法 5awk 'BEGIN{print '"$A"'+'"$B"'}' # 方法 6 14) 如何检查文件系统中是否存在某个文件 ? ?1 2 3 4 if [ -f /var/log/messages ]thenecho "File exists"fi15) 写出 shell 脚本中所有循环语法 ?for 循环 : ?1 2 3 foriin$(ls);doecho item:$idonewhile 循环 : ?1 2 3 4 5 6 #!/bin/bashCOUNTER=0while [ $COUNTER -lt 10 ]; doecho The counter is $COUNTERlet COUNTER=COUNTER+1doneuntil 循环 :1 2 3 4 5 6 #!/bin/bashCOUNTER=20until [ $COUNTER -lt 10 ]; doecho COUNTER $COUNTERlet COUNTER-=116) 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?这一行说明要使用的shell 。
shell 笔试题
shell 笔试题1、SHELL脚本test.sh权限为644,脚本没有执行权限的时候怎么执行test.sh脚本() [单选题] *A sh test.sh(正确答案)B python test.shC exec test.shD ./test.sh2、SHELL脚本中$0代表什么() [单选题] *A 脚本传递的所有参数B 脚本名(正确答案)C 脚本第一个参数D 脚本参数个数3、如下条件判断语句,输出内容为()name="zhangsan"if [ "$name" == "Xzhangsan" ];thenecho "true"elseecho "false"fi [单选题] *A trueB false(正确答案)4、文件表达式中,-x是什么权限() [单选题] *A 读权限B 写权限C 执行权限(正确答案)D 是否为目录5、while死循环中如何跳出当前循环() [单选题] *A continueB selectC break(正确答案)D goto6、read -s -t 30 -p命令中-s参数的含义是() [单选题] *A 静默输出(正确答案)B DEBUG模式输出C 结合-t参数,休眠7、SHELL脚本中如何执行函数() [单选题] *A sh 函数名B 函数名(正确答案)C function 函数名D ./函数名8、SHELL脚本函数如何返回字符串() [单选题] *A return 字符串B echo 字符串(正确答案)C print 字符串D printf 字符串9、SHELL脚本中单引号可以识别变量() [判断题] *对错(正确答案)10、SHELL脚本中函数return不可以返回字符串() [判断题] *对(正确答案)错11、SHELL脚本中continue指令是跳出本次循环进入下一次循环() [判断题] *对(正确答案)错12、SHELL脚本中双引号不能识别变量() [判断题] *对错(正确答案)13、SHELL脚本中反撇``和$()中都可以执行命令() [判断题] *对(正确答案)错。
70 个经典的shell 脚本面试问题及解答
选择了 70 个你可能遇到的 shell 脚本面试问题及解答。
了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务。
在过去的几年里,我们注意到所有的 linux 工作职位都要求脚本技能。
1) 如何向脚本传递参数 ?./script argument例子: 显示文件名称脚本 ?1 2 3 4 ./show.sh file1.txtcat show.sh#!/bin/bashecho $1(LCTT 译注:谢谢某匿名访客的提醒,原题有误,修改之。
)2) 如何在脚本中使用参数 ?第一个参数 : $1,第二个参数 : $2例子 : 脚本会复制文件(arg1) 到目标地址(arg2) ?1 2 3 4 ./copy.sh file1.txt /tmp/cat copy.sh#!/bin/bashcp $1 $23) 如何计算传递进来的参数 ?$#4) 如何在脚本中获取脚本名称 ?$05) 如何检查之前的命令是否运行成功 ?$?6) 如何获取文件的最后一行 ?tail-17) 如何获取文件的第一行 ?head-18) 如何获取一个文件每一行的第三个元素 ?awk'{print $3}'9) 假如文件中每行第一个元素是 FIND ,如何获取第二个元素awk'{ if ($1 == "FIND") print $2}'10) 如何调试 bash 脚本将 -xv 参数加到 #!/bin/bash 后例子:#!/bin/bash –xv11) 举例如何写一个函数 ? ?1 2 3 function example {echo "Hello world!"}12) 如何向连接两个字符串 ? ?1 2 3 4 V1="Hello"V2="World"V3=${V1}${V2}echo $V3输出HelloWorld13) 如何进行两个整数相加 ? ?1 2 3 4 V1=1V2=2let V3=$V1+$V2echo $V3输出3据 @kashu 的意见,本题的更佳回答为:两个整数相加,还有若干种方法实现: ?1 2 3 4 5 6 7 A=5B=6echo $(($A+$B)) # 方法 2echo $[$A+$B] # 方法 3expr $A + $B # 方法 4echo $A+$B | bc # 方法 5awk 'BEGIN{print '"$A"'+'"$B"'}' # 方法 614) 如何检查文件系统中是否存在某个文件 ? ?1 2 3 4 if [ -f /var/log/messages ]thenecho "File exists"fi15) 写出 shell 脚本中所有循环语法 ?for 循环 : ?1 2 3 foriin$(ls);doecho item:$idonewhile 循环 : ?1 2 3 4 5 6 #!/bin/bashCOUNTER=0while [ $COUNTER -lt 10 ]; doecho The counter is $COUNTERlet COUNTER=COUNTER+1doneuntil 循环 :?1 2 3 4 5 6 #!/bin/bashCOUNTER=20until [ $COUNTER -lt 10 ]; doecho COUNTER $COUNTERlet COUNTER-=1done16) 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?这一行说明要使用的 shell 。
