shell外部輔助命令

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   使用   ar   for   

date

Linux時鐘分為系統時鐘(System Clock)和硬體(Real Time Clock,簡稱RTC)時鐘。系統時鐘是指當前Linux Kernel中的時鐘,而硬體時鐘則是主板上由電池供電的時鐘,這個硬體時鐘可以在BIOS中進行設定。當Linux啟動時,硬體時鐘會去讀取系統時鐘的 設定,然後系統時鐘就會獨立於硬體運作。
Linux中的所有命令(包括函數)都是採用的系統時鐘設定。在Linux中,用於時鐘查看和設定的命令主要有date、hwclock。

若是不以加號作為開頭,則表示要設定時間,而時間格式為 MMDDhhmm[[CC]YY][.ss],其中 MM 為月份,DD 為日,hh 為小時,mm 為分鐘,CC 為年份前兩位元字,YY 為年份後兩位元字,ss 為秒數

在linux shell編程中,經常用到日期的加減運算
以前都是自己通過exprFunction Compute,很麻煩
其實date命令本身提供了日期的加減運算
非常方便。例如:得到昨天的時間
date +%Y%m%d --date="-1 day"
date 用法: date [OPTION]... [+FORMAT]
date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]]
date 可以用來顯示或設定系統的日期與時間。
1.在顯示方面,使用者可以設定欲顯示的格式,格式設定為一個加號後接數個標記,其中可用的標記列表如下:
% :  列印出 %
%n : 下一行
%t : 跳格
%H : 小時(00..23)
%I : 小時(01..12)
%k : 小時(0..23)
%l : 小時(1..12)
%M : 分鐘(00..59)
%p : 顯示本地 AM 或 PM
%r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M)
%s : 從 1970 年 1 月 1 日 00:00:00 UTC 到目前為止的秒數
%S : 秒(00..61)
%T : 直接顯示時間 (24 小時制)
%X : 相當於 %H:%M:%S
%Z : 顯示時區 %a : 星期幾 (Sun..Sat)
%A : 星期幾 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接顯示日期與時間
%d : 日 (01..31)
%D : 直接顯示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第幾天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第幾周 (00..53) (以 Sunday 為一周的第一天的情形)
%w : 一周中的第幾天 (0..6)
%W : 一年中的第幾周 (00..53) (以 Monday 為一周的第一天的情形)
%x : 直接顯示日期 (mm/dd/yy)
%y : 年份的最後兩位元字 (00.99)
%Y : 完整年份 (0000..9999)

2.在設定時間方面
date -s //設定目前時間,只有root許可權才能設定,其他只能查看。
date -s 20080523 //設定成20080523,這樣會把具體時間設定成空00:00:00
date -s 01:01:01 //設定具體時間,不會對日期做更改
date -s “01:01:01 2008-05-23″ //這樣可以設定全部時間
date -s “01:01:01 20080523″ //這樣可以設定全部時間
date -s “2008-05-23 01:01:01″ //這樣可以設定全部時間
date -s “20080523 01:01:01″ //這樣可以設定全部時間

3.加減
date +%Y%m%d         //顯示現在天年月日
date +%Y%m%d --date="+1 day"  //顯示後一天的日期
date +%Y%m%d --date="-1 day"  //顯示前一天的日期
date +%Y%m%d --date="-1 month"  //顯示上一月的日期
date +%Y%m%d --date="+1 month"  //顯示下一月的日期
date +%Y%m%d --date="-1 year"  //顯示前一年的日期
date +%Y%m%d --date="+1 year"  //顯示下一年的日期

或者更簡單點的  date=`date -d -${t}day ‘+%Y%m%d‘` //為t為前幾天

[[email protected] root]# date -d next-day +%Y%m%d
20060328
[[email protected] root]# date -d last-day +%Y%m%d
20060326
[[email protected] root]# date -d yesterday +%Y%m%d
20060326
[[email protected] root]# date -d tomorrow +%Y%m%d
20060328
[[email protected] root]# date -d last-month +%Y%m
200602
[[email protected] root]# date -d next-month +%Y%m
200604
[[email protected] root]# date -d next-year +%Y        
2007
date –s:按字串方式修改時間
只修改日期,輸入:date -s 2007-08-09
只修改時間,輸入:date -s 14:15:00
同時修改日期時間,注意要加雙引號,日期與時間之間有一空格,輸入:
#date -s "2007-08-03 14:15:00"

注意 :當你不希望出現無意義的 0 時(比如說 1999/03/07),則可以在標記中插入 - 符號,比如說 date ‘+%-H:%-M:%-S‘ 會把時分秒中無意義的 0 給去掉,像是原本的 08:09:04 會變為 8:9:4。另外,只有取得許可權者(比如說 root)才能設定系統時間。
當你以 root 身分更改了系統時間之後,請記得以 clock -w 來將系統時間寫入 CMOS 中,這樣下次重新開機時系統時間才會持續抱持最新的正確值。

 

expr

expr命令一般用於整數值,但也可用於字串。一般格式為:
expr argument operator argument
expr也是一個手工命令列計數器。
[[email protected] script]# expr 10 + 10
20
[[email protected] script]# expr 10 - 8
2
[[email protected] script]# expr 2 \* 3  反斜線屏蔽其特定含義
6
[[email protected] script]# expr 30 / 3 / 2
5

seq

用法:seq [選項]... 尾數
 或:seq [選項]... 首數 尾數
 或:seq [選項]... 首數 增量 尾數
以指定增量從首數開始列印數字到尾數。
 -f, --format=格式 使用printf 樣式的浮點格式
 -s, --separator=字串使用指定字串分隔數字(預設使用:\n)
 -w, --equal-width 在列前添加0 使得寬度相同
     --help 顯示此協助資訊並退出
     --version 顯示版本資訊並退出
如果省略了首數或者增量,則預設其值為1,即使這樣尾數仍小於首數。
首數、增量和尾數均以浮點數形式解釋。當首數小於尾數時增量一般為正值,
相反在首數大於尾數時增量一般為負數。
指定的格式必須適用於顯示"double"類型的參數;當首數、增量和尾數均為指定
精確度的定點十進位數時預設為"%.精確度f",否則預設為"%g"。
從1迴圈到100的兩種方法(bash 其它的shell沒試過)
for x in `seq 1 100`;do echo $x;done
for x in {1..100};do echo $x;done
輸出1-100中,不包含數字7,且不能被7整除的數
seq 100 | grep -v "7" | awk ‘$0%7!=0{print}‘

另外,不用 seq 的話還可以這樣:
[[email protected]]# for i in {1..10};do echo $i;done
1 和 10 之間是兩個半形的點

-f 最常用 , 例如一次製做 10 個名 dir001 , dir002 .. dir010 的目錄,它便很有用途,我們可以
這樣下一個命令便可了
seq -f ‘dir%03g‘ 1 10 | xargs mkdir

mkdir $(seq -f ‘dir%03g‘ 1 10)
它用的是 printf 的格式 , %03g‘ 代表以三位浮點數,以此方法,如用bash3 的 printf
也可作為等價命令
printf ‘dir%03d\n‘ {1..10} | xargs mkdir  或 mkdir `printf ‘dir%03d ‘ {1..10}`
awk 當然也可以
awk ‘BEGIN { while (num < 10 ) printf "dir%03d\n", ++num ; exit}‘ | xargs mkdir
這樣會比寫一個腳本快, 不必寫成
for dir in 001 002 003 004 005 006 007 008 009 010
do
    mkdir dir${dir}
done
我也常用 seq 下載一些用數字的 jpeg , 只要格式有數字順序便可,尤以一些 xxx site  ;)
for i in `seq -f ‘%02g‘ 1 20`
do
  if ! wget -P $HOME/tmp -c [img]http://www.xxxsite.com/photo/$i.jpg[/img] ; then
     wget -P $HOME/tmp -c $_
  fi
done

-s 選項主要改變輸出的分格符, 預設是 \n , 就是 newline
如用 -s 便可改變 , 如
seq -s ‘ ‘ 1 10
1 2 3 4 5 6 7 8 9 10  , 以空格作為分格,

shell外部輔助命令

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.