2020年10月30日 星期五

shell script 大寫轉小寫,小寫轉大寫

#大寫轉小寫
============= upper_to_lower.sh ================= 

value="$(echo $1 | tr '[:upper:]' '[:lower:]')"
echo $value

執行:
./upper_to_lower.sh  AA      ==>   aa



#小寫轉大寫
============= lower_to_upper_.sh ================= 

value="$(echo $1 | tr '[:upper:]' '[:lower:]')"
echo $value

執行:
./upper_to_lower.sh  aa     ==>   AA



2020年10月27日 星期二

Source Insight 無法加入 *.cc檔案

 遵照下面操作步驟,可以把*.cc檔案加入到目前Project


Options -> Document Options,然後在視窗上方 Document Type的下拉選項,選擇C++ Source File,右邊的File filter欄位,請加入 *.cc ,然後就可以選擇Close Button.














接著在右邊檔案列表的地方,按滑鼠右鍵,選擇 Synchronize Files

shell script if 判斷多個條件

 if判斷多個條件的寫法如下: (sh)

=================

#!/bin/sh
A=10
B=15

if [ $A = "10" ] && [ $B = "15" ]; then
    echo "A=10 and B=15"
fi

if [ $A = "10" ] || [ $B < $A ]; then
    echo "A=10 or B<A"
fi



2020年9月22日 星期二

Shell script使用for來parser以空白做間格的字串

 Shell script使用forparser以空白做間格的字串 (Bash)

 #!/bin/bash

package="111 222 333 555 666"

for p in ${package[@]}; do

    echo $p

done

 

實際執行結果,如下圖



2020年9月21日 星期一

cp: will not overwrite just-created

 今天 跑Script的途中,遇到一個問題 cp: will not overwrite just-created,而導致script停了下來

其發生主要的原因是,當我們 cp 或是 mv 兩個不同地方,卻是同樣的檔案名稱到同一個目錄底下

系統為了防止第二個文件去覆蓋第一個文件,所以報錯誤

 

今天遇到了,才知道會有這樣子的錯誤訊息,以上~


實際範例說明:  

有a, b, c三個資料夾,a與b資料夾內都有一個叫做file的檔案,接著我們故意一行指令同時複製a底下的file,與b底下的file到c資料夾,如下圖所示,就會出現此錯誤訊息!





2020年7月21日 星期二

main後面的參數 argc, argv 基本練習

C語言的main函數是可以帶參數的,分別是int類型的argc, 以及char類型的argv

而編譯出來的執行檔,可以在後面帶入字串,argc可以取得總共帶參數的數量,argv則可以取得每個參數的字串

寫一個範例,執行此執行檔,可以印出我執行檔後面帶的參數,範例如下:


#include <stdio.h>
int main(int argc, char *argv[]){    
     if(argc<2)    
    {        
          printf("no argument!\n");        
          return 0;    
    }    
    for(int i=0; i<argc; i++)        
        printf("%d=%s\n", i+1, argv[i]);    
    return 1;
}

編譯此程式,指令為: gcc argc_argv.c -o argc_argv
將此程式編譯成argc_argv,執行此執行檔: ./argc_argv aaa bbb
輸出結果   ===>   
1=./argc_argv
2=aaa
3=bbb  



2020年7月19日 星期日

call by value, call by address, call by reference

=================    call by value   ====================
其主要的意思, 參數以數值方式傳遞, 將一個變數的值, 帶入到副程式當中使用
範例如下:

void call_by_value(int value)
{
    int a;
    a = value
    print("call by value a=%d\n", a);
}

int main()
{
    int a=10;
    call_by_value(a);
    return 0;
}



==================   call by address  =====================
參數以記憶體位址的方式傳遞, 帶入到副程式中使用, 此帶入的變數也會在副程式的運算當中被更動.
範例如下:

void call_by_address_swap(int *a, int *b)
{
    int c;
    c=*a;
    *a=*b;
    *b=c;
}

int main()
{
    int value1=5;
    int value2=10;
    printf("before swap: value1=%d, value2=%d\n", value1, value2);
    call_by_address_swap(&value1, &value2);
    printf("after swap: value1=%d, value2=%d\n", value1, value2);
    return 0;
}


===================   call by reference  ====================
將參數以數值的方式傳遞到呼叫此參數的副程式,副程式需要有一個參考來接收這個參數,這是只有C++才有的,C是沒有的
範例如下:

void call_by_reference_swap(int &a, int &b)
{
    int c;
    c=a;
    a=b;
    b=c;
}

int main()
{
    int value1=5;
    int value2=10;
    printf("before swap: value1=%d, value2=%d\n", value1, value2);
    call_by_reference_swap(value1, value2);
    printf("after swap: value1=%d, value2=%d\n", value1, value2);
    return 0;
}