Ubuntu linux命令練習1 shell seq rand 格式化

NEO ME發表於2020-10-28

linux命令練習1

一些基礎命令,以下為方便演示均用shell指令碼演示

  1. od
#!/bin/bash -v

echo -n "$IFS" | od -c

echo -n "$IFS" | od -b


#左側輸出為變數地址(八進位制)
# -c 選擇可列印字元或反斜槓轉義
# -b 選擇八進位制位元組

在這裡插入圖片描述

  1. type
#!/bin/bash -v

type type

type let 

type expr 

type awk 

#let 是 Shell 內建命令,其他幾個是外部命令,都在 /usr/bin 目錄 下

#而 expr 和 bc 因為剛用過,已經載入在記憶體的 hash 表中

#說明:如果要檢視不同命令的幫助,對於 let 和 type 等 Shell 內建命令,可以通過 Shell 的一個內建命令 help 來檢視相關幫助,而一些外部命令可以通過 Shell 的一個外部命令 man 來檢視幫助,用法諸如 help let , man expr 等。

  1. while
#!/bin/bash 
# calc.sh 
i=0; 
while [ $i -lt 10000 ] 
do 
	((i++)) 
done 
echo $i

#$ time calc.sh
#10000 
#real 0m1.319s user
#0m1.056s
#sys 0m0.036s

#time 命令可以用來統計命令執行時間,這部分時間包括總的執行時間,使用者空間執 行時間,核心空間執行時間,它通過 ptrace 系統呼叫實現。

  1. ++
#!/bin/bash
((i++)) #最快
let i++; #內建命令,效率也很高
i=$(expr $i + 1)
i=$(echo $i+1|bc) 
i=$(echo "$i 1" | awk '{printf $1+$2;}') # expr , bc , awk 的計算效率就比較低

  1. 檔案讀取
#!/bin/bash
#sumA_B.sh

#[ $# -lt 1 ] && echo "please input the income file" && exit -1
#[ ! -f $1 ] && echo "$1 is not a file" && exit -1

income=1

awk '{
	printf("%d\n",$2+$1);
}'

#-lt(less than)  : 測試一個數是否小於另一個數;小於,為真;否則,為假;

#-f : 判斷引數是否為檔案

#-gt(greter than) : 測試一個數是否大於另一個數;大於,為真;否則,為假;

#-lt(less than)  : 測試一個數是否小於另一個數;小於,為真;否則,為假;

#-ge(greter equal): 大於或等於
#-le(less equal) :小於或等於

  1. 獲取一系列數
#!/bin/bash -v

for i in {1..5};
do echo -n "$i ";
done

  1. seq
#!/bin/bash -v
#獲取一系列數.sh

#其實通過一個迴圈就可以產生一系列數,但是有相關工具為什麼不用呢! seq 就是這麼一個 小工具,它可以產生一系列數,你可以指定數的遞增間隔,也可以指定相鄰兩個數之間的分 割符

seq 5

seq 1 5

seq 1 2 5

seq -s: 1 2 5

seq 1 2 15

seq -w 1 2 14

seq -s: -w 1 2 14

seq -f "0x%g" 1 5


#!/bin/bash -v

for i in `seq -f"http://thns.tsinghua.edu.cn/thnsebooks/ebook73/%02g.pdf" 1 21`;
do wget -c $i;
done

for i in `seq -w 1 21`;do wget -c "http://thns.tsinghua.edu.cn/thnsebooks/ebook73/$i ";
done



  1. 隨機rand
#!/bin/bash -v
#獲取一個隨機數.sh

echo $RANDOM

echo "" | awk '{srand();printf("%f",rand());}'

#說明: srand() 在無引數時,採用當前時間作為 rand() 隨機數產生器的一個 seed

#!/bin/bash -v
#隨機產生一個從 0 到 255 之間的數字.sh

expr $RANDOM / 128

echo "" | awk '{srand();printf("%d\n",rand()*255);}'

#可以通過 RANDOM 變數的縮放和 awk 中 rand() 的放大來實現

#!/bin/bash -v
# getip.sh -- get an usable ipaddress automatically

# set your own network, default gateway, and the time out of "ping" command
net="192.168.1"
default_gateway="192.168.50.2"
over_time=2

# check the current ipaddress
ping -c 1 $default_gateway -W $over_time
[ $? -eq 0 ] && echo "the current ipaddress is okey!" && exit -1;

while :; do
	# clear the current configuration
	ifconfig eth0 down
	# configure the ip address of the eth0
	ifconfig eth0 \
		$net.$(($RANDOM /130 +2)) \
		up
	# configure the default gateway
	route add default gw $default_gateway
	# check the new configuration
	ping -c 1 $default_gateway -W $over_time
	# if work, finish
	[ $? -eq 0 ] && break
done

# 	$?:表示上一個命令執行的退出狀態

  1. 格式化
#!/bin/bash -v

echo "scale=5; 1/6" | bc

echo "1 6" | awk '{printf("%0.5f\n",$1/$2)}'

  1. 餘弦值轉角度
#!/bin/bash -v

export cos=0.800123;

echo "scale=100; a(sqrt(1-$cos^2)/$cos)*180/(a(1)*4)" | bc -l

#在用 bc 進行運算時,如果不用 scale 指定精度,而在 bc 後加上 -l 選項,也可 以進行浮點運算,只不過這時的預設精度是 20 位

echo 0.800123 | awk '{ printf("%s\n", atan2(sqrt(1-$1^2),$1)*180/3.1415926535);}'



相關文章