顯示具有 shell 標籤的文章。 顯示所有文章
顯示具有 shell 標籤的文章。 顯示所有文章

2018年10月4日 星期四

好用的終端機軟體

terminator

sudo add-apt-repository ppa:gnome-terminator
sudo apt-get update
sudo apt-get install terminator

2017年7月5日 星期三

shell script 特殊技巧收集

動態改變命令列的提示(prompt)

PROMPT_COMMAND

PROMPT_COMMAND 是 bash 的環境變數,每執行一道命令列命令後,存在此變數的指令都會被執行一遍,我們可以利用此一特性改變我們每一次的命令列提示。

以下所示範的是:

  1. 顯示上一次執行命令的狀態碼(Exit Code)。
  2. 若現行工作目錄未改變,則顯示目前的名錄名即可,否則顯示完整的路徑名。
  3. 部份 code 引用原來的 Ubuntu 家目錄(home)底下的 .bashrc 的 PS1 設定,如:debian_chroot,其他系統需要作相對應的修改。
__var_show_dirpath__=
__var_show_dirpath__='\w'
PROMPT_COMMAND='__prompt_command__'
__prompt_command__() {
    PS1="[$?] "
    if [ "$__var_show_dirpath__" = "$PWD" ]; then
        __show_dirpath__='\W'
    else
        __show_dirpath__='\w'
        __var_show_dirpath__=$PWD
    fi
    PS1+='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]'
    PS1+=$__show_dirpath__
    PS1+='\[\033[00m\]\$ '
}

你可以將以上的程式碼嵌入進你家目錄的 .bashrc 中,重開啟 shell 便能看到效果,如以下所示:
[0] cy@cyvm:~/tmp$ pwd
/home/cy/tmp
[0] cy@cyvm:tmp$ ls
mnt  old  test
[0] cy@cyvm:tmp$ cd test
[0] cy@cyvm:~/tmp/test$ ls

2017年5月18日 星期四

shell script 特殊技巧收集

列出所有的引數(arguments)

使用 bash 變數: $@

#!/bin/bash
echo $@ ## 這是引數陣列

[測試]

cy@cyvm:~/test$ ./test.sh 1 2 3 4 5
1 2 3 4 5

一一列出 $@ 每一個元素:

#!/bin/bash
for i ; do
 echo $i
done

[測試]

cy@cyvm:~/test$ ./test.sh 1 2 3 4 5
1
2
3
4
5

改用 $* 看看:

#/bin/bash
echo $* ## 這是引數字串
for i in $*; do
 echo $i
done

[測試]

cy@cyvm:~/test$ ./test.sh 1 2 3 4 5
1 2 3 4 5
1
2
3
4
5

使用 shift 移出前頭的引數來一一列示:

#/bin/bash
echo $# ## 這是引數總數
while (("$#")); do
 echo $1
 shift
done

[測試]

cy@cyvm:~/test$ ./test.sh 1 2 3 4 5
5
1
2
3
4
5
參考文章

2017年3月17日 星期五

shell script 特殊技巧收集

將字串變大/小寫

大寫

cy@cyvm:~$ STR=teSt
cy@cyvm:~$ echo ${STR}
teSt

首字大寫

cy@cyvm:~$ echo ${STR^}
TeSt

全部大寫

cy@cyvm:~$ echo ${STR^^}
TEST

小寫

cy@cyvm:~$ STR=TeSt
cy@cyvm:~$ echo ${STR}
TeSt

首字小寫

cy@cyvm:~$ echo ${STR,}
teSt

全部小寫

cy@cyvm:~$ echo ${STR,,}
test

2017年1月30日 星期一

Linux 時間管理常用指令收集

1. date

[說明]

查看或設定時間。


[範例]

查看時間

cy@cyvm:~$ date
公曆 20十七年 一月 卅日 週一 十六時47分廿四秒

查看時間,顯示成英文格式

cy@cyvm:~$ LANG=en_US ; date
Mon Jan 30 16:53:18 CST 2017

cy@cyvm:~$ LANG=en ; date
Mon Jan 30 16:53:31 CST 2017

查看時間,格式化顯示時間

cy@cyvm:~$ date +"%Y-%m-%d %H:%M:%S"
2017-01-30 17:05:53
cy@cyvm:~$ date +"%s"
1485767170

  • 一般常用年月日時分秒組合數字格式
    %Ffull date; same as %Y-%m-%d
    %Ttime; same as %H:%M:%S
    %Yyear
    %mmonth (01..12)
    %dday of month (e.g., 01)
    %Hhour (00..23)
    %Mminute (00..59)
    %Ssecond (00..60)
    %Nnanoseconds (000000000..999999999)

  • 月份文字
    %Blocale's full month name (e.g., January)
    %blocale's abbreviated month name (e.g., Jan)
    %hsame as %b

  • 星期文字
    %Alocale's full weekday name (e.g., Sunday)
    %alocale's abbreviated weekday name (e.g., Sun)

  • 時區
    %z+hhmm numeric time zone (e.g., -0400)
    %:z+hh:mm numeric time zone (e.g., -04:00)
    %::z+hh:mm:ss numeric time zone (e.g., -04:00:00)
    %:::znumeric time zone with : to necessary precision (e.g., -04, +05:30)
    %Zalphabetic time zone abbreviation (e.g., EDT)

  • UNIX Timestamp (Epoch time)
    %sseconds since 1970-01-01 00:00:00 UTC

  • 年或週的週期日數
    %jday of year (001..366)
    %uday of week (1..7); 1 is Monday

  • 週數
    %Uweek number of year, with Sunday as first day of week (00..53)
    %Wweek number of year, with Monday as first day of week (00..53)

  • ISO week number
    %Gyear of ISO week number (see %V); normally useful only with %V
    %glast two digits of year of ISO week number (see %G)
    %VISO week number, with Monday as first day of week (01..53)

  • 世紀
    %Ccentury; like %Y, except omit last two digits (e.g., 20)
    %ylast two digits of year (00..99)

  • 12小時制
    %Ihour (01..12)
    %plocale's equivalent of either AM or PM; blank if not known
    %Plike %p, but lower case

  • 地區限定格式
    %clocale's date and time (e.g., Thu Mar 3 23:05:25 2005)
    %xlocale's date representation (e.g., 12/31/99)
    %Xlocale's time representation (e.g., 23:13:48)
    %rlocale's 12-hour clock time (e.g., 11:11:04 PM)

  • 特殊文字
    %%a literal %
    %na newline
    %ta tab

  • 不常用或有其他替代方案的格式
    %Ddate; same as %m/%d/%y
    %R24-hour hour and minute; same as %H:%M
    %eday of month, space padded; same as %_d
    %khour, space padded ( 0..23); same as %_H
    %lhour, space padded ( 1..12); same as %_I
    %wday of week (0..6); 0 is Sunday


設定時間

*注意!操作此需要 root 權限。

cy@cyvm:~$ sudo date +"%Y-%m-%d %H:%M:%S" -s "2016-10-05 12:24:36"
2016-10-05 12:24:36



2. ntpdate

[說明]

經由 NTP (Network Time Protocol,RFC 1305),設定系統時間。


[範例]

設定時間

*注意!操作此需要 root 權限。

cy@cyvm:~$ sudo ntpdate -s time.stdtime.gov.tw



3. hwclock

[說明]

在 Linux 下操作時間,一般都只是寫入作業系統,若要同步寫入硬體(RTC, real-time clock),需要使用此指令。


[範例]

查看時間

cy@cyvm:~$ sudo hwclock -r
Mon Jan 30 05:35:39 2017  .262043 seconds

設定時間

cy@cyvm:~$ sudo hwclock -w

2017年1月23日 星期一