bashell基礎

来源:http://www.cnblogs.com/lizheng114/archive/2017/04/03/6661492.html
-Advertisement-
Play Games

身為一個iOS程式員,雖然iOS相關技術十分重要,但是bash也是不可不瞭解的,因為技能的成長,除了深度,還需要廣度。下麵就來介紹下bash。 Shell是C語言編寫的,所以他是解釋性語言,運行在Linux系統下,在Mac下,一般使用的是bashell。 bashell都是運行在Terminal下, ...


身為一個iOS程式員,雖然iOS相關技術十分重要,但是bash也是不可不瞭解的,因為技能的成長,除了深度,還需要廣度。下麵就來介紹下bash。

Shell是C語言編寫的,所以他是解釋性語言,運行在Linux系統下,在Mac下,一般使用的是bashell。

bashell都是運行在Terminal下,本文的所有腳本也都是運行在Terminal下的。

常用的命令行

pwd         //當前路徑
ls -l          //列出當前目錄下所有文件
mkdir TestFolder           //創建文件夾
touch file.txt file1.txt file2.txt           //創建3個文件,空格分隔
ls -l | grep txt | wc -l            //列出所有文件,然後查找文件名包含txt的文件,然後計算總共有多少個結果

 註:|就是將左邊的結果作為右邊的輸入

man  command  //man後面接命令則顯示該命令的所有幫助信息,再輸入q則返回

history  //顯示之前輸入的所有歷史信息
clear    //清空所有行
du 文件    //顯示文件大小
cat 文件    //顯示文件內容
less 文件    //分頁顯示文件內容,適合大文件
cp 文件  新文件    //複製文件到新文件
mv 文件  目錄    //移動文件到目錄
rm 文件1 文件2 文件3    //刪除文件1,文件2,文件3
rm -rf /* 或者 rm -rf /    //刪除所有文件,千萬不要執行這一句!!!!!千萬不要!!!!
sudo su   //成為root用戶
chomd +x 文件    //給文件執行許可權,在做shell的時候十分有用
wc -m << END    //從鍵盤讀入數據並統計讀入數據的大小,以END符號來結束
ps -ef    //顯示所有進程列表
top       //顯示進程動態列表
kill 進程PID    //結束一個進程
tar -cvf archive.tar file1.txt file2.txt file3.txt    //歸檔
tar -xvf tutorial.tar    //解檔

gzip tutorial.tar    //壓縮
gunzip tutorial.tar.gz    //解壓縮
unzip archive.zip    //解壓縮

基礎的命令行就介紹到這裡,下麵開始shell

Shell基礎

在介紹shell之前,需要先瞭解vim

輸入vim,然後會進入操作界面,這個操作界面分三種模式:互動式,插入式,命令式。其中互動式和命令式我個人覺得比較接近,都是通過命令來作為輸入,區別是命令式需要先輸入:

我們先輸入

vim 文件    //一般以.sh結尾,你用txt結尾也可以

然後按下i,就進入插入模式了,就可以開始寫shell了

我們輸入一些代碼來分別講講基礎shell語法:

#指明運行shell的解釋器
#!/bin/bash        

#輸出文本
echo "your name"     

#格式化方式輸入文本
printf "%d %s" 123 "abcds"   

#從鍵盤輸入
read PERSON        

#列印輸入的內容
echo "hello $PERSON"       

#val是變數,expr是運算符,反引號表示val可以將內容先存到記憶體中,以後使用再將結果從記憶體中讀出來;等號左右都不能有空格,expr後面空格不能少
val=`expr 2 + 2`    

#$引用變數,雙引號和單引號用法相同,不過如果含有變數,要用雙引號  
echo "value : $val"    

#if語法,空格不能少;eq表示相等,fi表示if結束
if [ 10 -eq 100 ]       
then
        echo "equal"
else
        echo "not equal"
fi          

file="test.sh"
#-f 表示是否普通文件
if [ -f $file  ]      
then
        echo "ordinary file"
else
        echo "not ordinary file"
fi

string="79838924kfdsldjslfjdslfs"
#字元串長度
echo ${#string}      

#字元串第1到5位,輸出98389
echo ${string:1:5}   

name[0]="a"
name[1]="b"
name[2]="c"
#列印數組name的成員
echo ${name[*]}   

length=${#name[*]}
#列印數組長度
echo "array length is $length"    

#for語法,./*是當前目錄所有文件,mm表示迴圈體內單個文件
for mm in ./*       
do
        echo $mm
done 

count=0
#while語法結構, -lt表示less than
while [ $count -lt 5 ]     
do
        count=`expr $count + 1`
        echo $count
done 

#case語法結構
aNum=1
case $aNum in
    1)  echo 'abc'
    ;;
    *)  echo 'default'
    ;;
esac

#shell函數,帶參數的寫法,$1表示第一個參數,$2表示第二個
#註意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數
functionWithParam(){
        echo "first param $1"
        echo "second param $2"
        return 123
}

#函數傳參
functionWithParam 1 2
#獲取函數返回值
ret=$?
echo $ret

#$#    傳遞給函數的參數個數
#$*    顯示所有傳遞給函數的參數

#接收.sh的第一個參數
option="${1}"    

當這些腳本都輸入完畢以後,按下esc鍵,然後輸入:wq   表示保存並退出vim的意思

然後輸入:

chmod +x test.sh   //給sh文件以執行許可權

./test.sh    //開始執行腳本 ./為執行路徑,如果你的腳本放在/bin, /sbin, /usr/bin,/usr/sbin等PATH里,才可以省略./

如果想要調試執行,則輸入:

bash -x test.sh

 

基本的命令行和基本的bash就介紹到這裡

 

參考文章:

http://www.jianshu.com/p/7c3a4f56f671

http://c.biancheng.net/cpp/view/6994.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 餅圖模塊, 詳細模塊控制項封裝 餅圖封裝分為三個控制項. 餅圖控制項 描述控制項 餅圖控制項(左)描述控制項(右)整合 圖為將兩個控制項包裝好了以後的樣子稱為BigBackgroundView控制項 BigBackgroundView控制項: BigBackground控制項中提供的方法 從方法可以看出只要傳入pieV ...
  • Web New Year, New Blog Day 10 - Using JetBrains Rider with a .NET Core Console Application JavaScript Interview Day # 1: How to create a Class Using R... ...
  • 防止連續點擊的實現方式有很多種,比如,在所有的onclick裡面加上防多次點擊的代碼,或者定義一個新的OnClickListener,在裡面加上防多次點擊的代碼,然後項目中的所有OnClickListener都用這個listener,當然還有一些其他的方式,這裡將介紹一種新的方式來實現,那就是aop ...
  • 參考: "深入理解Android之AOP" AOP雖然是方法論,但就好像OOP中的Java一樣,一些先行者也開發了一套語言來支持AOP。目前用得比較火的就是AspectJ了,它是一種幾乎和Java完全一樣的語言,而且完全相容Java(AspectJ應該就是一種擴展Java,但它不是像Groovy " ...
  • 關於講解UITabel View的使用 參照 鏈接 http://www.bubuko.com/infodetail-974265.html identifier 可以看到在創建cell的時候伴隨著一個identifier的綁定,這個identifier可以理解為這個cell標識,標識它屬於哪個重用 ...
  • 轉載請註明出處:http://www.cnblogs.com/cnwutianhao/p/6664293.html 應該是目前為止全網最詳細的GCM推送解析。 GCM官方解釋: https://developers.google.cn/cloud-messaging/?hl=zh-cn Send d ...
  • 通過更換代理解決 Android SDK 線上更新鏡像伺服器資源:大連東軟信息學院鏡像伺服器地址:http://mirrors.neusoft.edu.cn 埠:80北京化工大學鏡像伺服器地址:IPv4: http://ubuntu.buct.edu.cn/ 埠:80IPv4: http://u ...
  • 1.精簡代碼, 返回最後一句的值,這個方法有一個優點,所有的變數都在代碼塊中,也就是只在代碼塊的區域中有效,這意味著可以減少對其他作用域的命名污染。但缺點是可讀性比較差 NSURL *url = ({ NSString *urlString = [NSString stringWithFormat: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...