Linux中執行 .sh 的方法


linux下執行.sh文件的方法
   .sh文件就是文本文件,如果要執行,需要使用chmod a+x xxx.sh來給可執行權限。  
   
   是bash腳本么
  可以用touch test.sh #創建test.sh文件
  vi test.sh #編輯test.sh文件
  加入內容
  #!/bin/bash
   mkdir test
   保存退出。
  chmod a+x test.sh #給test.sh可執行權限
  如test,sh文件在 /home/work文件下
  執行
  方法一 本身目錄下運行
  進入 cd /home/workwen文件下
  執行 ./test.sh
   命令會在當前目錄下創建一個“test”目錄。
  方法二 絕對路勁運行
  執行 /home/work/test.sh  
  方法三 本身目錄下運行
  sh test.sh 
   最后建議:使用
  
   C代碼 
  1.man sh    
   man sh 來看看sh 的介紹~


Linux.sh語法


介紹:
1 開頭
 程序必須以下面的行開始(必須方在文件的第一行):
#!/bin/sh
  符號#!用來告訴系統它后面的參數是用來執行該文件的程序。在這個例子中我們使用/bin/sh來執行程序。
 當編寫腳本完成時,如果要執行該腳本,還必須使其可執行。
 要使編寫腳本可執行:
 編譯 chmod +x filename 這樣才能用./filename 來運行
2 注釋
 在進行shell編程時,以#開頭的句子表示注釋,直到這一行的結束。我們真誠地建議您在程序中使用注釋。
 如果您使用了注釋,那么即使相當長的時間內沒有使用該腳本,您也能在很短的時間內明白該腳本的作用及工作原理。
3 變量
 在其他編程語言中您必須使用變量。在shell編程中,所有的變量都由字符串組成,並且您不需要對變量進行聲明。要賦值給一個變量,您可以這樣寫:
#!/bin/sh
  #對變量賦值:
 a=”hello world”
# 現在打印變量a的內容:
 echo “A is:”
 echo $a
有時候變量名很容易與其他文字混淆,比如:
 num=2
  echo “this is the $numnd”
 這並不會打印出”this is the 2nd”,而僅僅打印”this is the “,因為shell會去搜索變量numnd的值,但是這個變量時沒有值的。可以使用花括號來告訴shell我們要打印的是num變量:
 num=2
  echo “this is the ${num}nd”
 這將打印: this is the 2nd
 4 環境變量
 由export關鍵字處理過的變量叫做環境變量。我們不對環境變量進行討論,因為通常情況下僅僅在登錄腳本中使用環境變量。
5 Shell命令和流程控制
 在shell腳本中可以使用三類命令:
1)Unix 命令:
  雖然在shell腳本中可以使用任意的unix命令,但是還是由一些相對更常用的命令。這些命令通常是用來進行文件和文字操作的。
 常用命令語法及功能
 echo “some text”: 將文字內容打印在屏幕上
 ls: 文件列表
 wc –l filewc -w filewc -c file: 計算文件行數計算文件中的單詞數計算文件中的字符數
 cp sourcefile destfile: 文件拷貝
 mv oldname newname : 重命名文件或移動文件
 rm file: 刪除文件
 grep ‘pattern’ file: 在文件內搜索字符串比如:grep ’searchstring’ file.txt
  cut -b colnum file: 指定欲顯示的文件內容范圍,並將它們輸出到標准輸出設備比如:輸出每行第5個到第9個字符cut -b5-9 file.txt千萬不要和cat命令混淆,
 這是兩個完全不同的命令
 cat file.txt: 輸出文件內容到標准輸出設備(屏幕)上
 file somefile: 得到文件類型
 read var: 提示用戶輸入,並將輸入賦值給變量
 sort file.txt: 對file.txt文件中的行進行排序
 uniq: 刪除文本文件中出現的行列比如: sort file.txt | uniq
  expr: 進行數學運算Example: add 2 and 3expr 2 “+” 3
  find: 搜索文件比如:根據文件名搜索find . -name filename -print
  tee: 將數據輸出到標准輸出設備(屏幕) 和文件比如:somecommand | tee outfile
  basename file: 返回不包含路徑的文件名比如: basename /bin/tux將返回 tux
  dirname file: 返回文件所在路徑比如:dirname /bin/tux將返回 /bin
  head file: 打印文本文件開頭幾行
 tail file : 打印文本文件末尾幾行
 sed: Sed是一個基本的查找替換程序。可以從標准輸入(比如命令管道)讀入文本,並將
 結果輸出到標准輸出(屏幕)。該命令采用正則表達式(見參考)進行搜索。不要和shell中的通配符相混淆。比如:將linuxfocus替換為 LinuxFocus :cat text.file | sed ’s/linuxfocus/LinuxFocus/’ >newtext.fileawk: awk 用來從文本文件中提取字段。缺省地,字段分割符是空格,可以使用-F指定其他分割符。
 catfile.txt | awk -F, ‘{print $1 “,” $3}’這里我們使用,作為字段分割符,同時打印第一個和第三個字段。如果該文件內容如下: Adam Bor, 34, IndiaKerryMiller, 22, USA命令輸出結果為:Adam Bor, IndiaKerry Miller, USA
 2) 概念: 管道, 重定向和 backtick
  這些不是系統命令,但是他們真的很重要。
 管道 (|) 將一個命令的輸出作為另外一個命令的輸入。
 grep “hello” file.txt | wc -l
  在file.txt中搜索包含有”hello”的行並計算其行數。
 在這里grep命令的輸出作為wc命令的輸入。當然您可以使用多個命令。
 重定向:將命令的結果輸出到文件,而不是標准輸出(屏幕)。
 > 寫入文件並覆蓋舊文件
 >> 加到文件的尾部,保留舊文件內容。
 反短斜線
 使用反短斜線可以將一個命令的輸出作為另外一個命令的一個命令行參數。
 命令:
 find . -mtime -1 -type f -print
  用來查找過去24小時(-mtime –2則表示過去48小時)內修改過的文件。如果您想將所有查找到的文件打一個包,則可以使用以下linux 腳本:
 #!/bin/sh
  # The ticks are backticks (`) not normal quotes (‘):
  tar -zcvf lastmod.tar.gz `find . -mtime -1 -type f -print`
 3) 流程控制
 1.ifif” 表達式 如果條件為真則執行then后面的部分:
 if ….; then
  ….
  elif ….; then
  ….
  else
  ….
  fi
  大多數情況下,可以使用測試命令來對條件進行測試。比如可以比較字符串、判斷文件是否存在及是否可讀等等…
 通常用” [ ] “來表示條件測試。注意這里的空格很重要。要確保方括號的空格。
 [ -f "somefile" ] :判斷是否是一個文件
 [ -x "/bin/ls" ] :判斷/bin/ls是否存在並有可執行權限
 [ -n "$var" ] :判斷$var變量是否有值
 [ "$a" = "$b" ] :判斷$a和$b是否相等
 執行man test可以查看所有測試表達式可以比較和判斷的類型。
 直接執行以下腳本:
 #!/bin/sh
  if [ "$SHELL" = "/bin/bash" ]; then
  echo “your login shell is the bash (bourne again shell)”
 else
  echo “your login shell is not bash but $SHELL”
 fi
  變量$SHELL包含了登錄shell的名稱,我們和/bin/bash進行了比較。
 快捷操作符
 熟悉C語言的朋友可能會很喜歡下面的表達式:
 [ -f "/etc/shadow" ] && echo “This computer uses shadow passwors”
 這里 && 就是一個快捷操作符,如果左邊的表達式為真則執行右邊的語句。
 您也可以認為是邏輯運算中的與操作。上例中表示如果/etc/shadow文件存在則打印” This computer uses shadow passwors”。同樣或操作(||)在shell編程中也是可用的。這里有個例子:
 #!/bin/sh
  mailfolder=/var/spool/mail/james
  [ -r "$mailfolder" ]‘ ‘{ echo “Can not read $mailfolder” ; exit 1; }
  echo “$mailfolder has mail from:”
 grep “^From ” $mailfolder
  該腳本首先判斷mailfolder是否可讀。如果可讀則打印該文件中的”From” 一行。如果不可讀則或操作生效,打印錯誤信息后腳本退出。這里有個問題,那就是我們必須有兩個命令:
 ◆打印錯誤信息
 ◆退出程序
 我們使用花括號以匿名函數的形式將兩個命令放到一起作為一個命令使用。一般函數將在下文提及。
 不用與和或操作符,我們也可以用if表達式作任何事情,但是使用與或操作符會更便利很多。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM