shell腳本優化
❶ shell腳本sed替換命令的問題,求高手回答一下 謝謝啊
1)cata.config|grep"^name"累贅,直接寫為grep"^name"a.config
2)>>/dev/null,不需要>>,直接>就可以,即使輸出可能是多行內容,也可以作為一個整體。
3)=前後有空格的話,將"="(=前後加上了空格)設為欄位分隔符就可以了。
awk -F' = ' "{print $2}"
當然,最好的做法是用集合[= ],這樣=和空格都可以作為分隔符,而且無論=左右有幾個空格都可以處理。awk -F'[= ]' "{print $NF}" ,awk內置變數NF表示欄位數,$NF就可以取出最後一個欄位。
4)sed"s/"${name_test}"/"cat"/"a.config可以再簡單些:sed"s/${name_test}/cat/"a.config
不過,你要做替換,直接awk就可以完成了,何必awk加sed呢;此外,grep的結果保存下來,就不用做兩次了。
output=`grep"^name"a.config`
[-n"$output"]&&echo"$output"|awk'{$NF="cat";print}'
分隔符都不用設置,直接用默認的就可以。
❷ shell 判斷目錄,如何優化這個腳本
判斷文件大小是不是0kb行不行?使用-s
if [ -s filenpath]; then
文件內容不為空
else
文件內容為空
fi
❸ Shell腳本語言優勢怎樣
Shell腳本語言的優勢在於處理偏操作系統底層的業務,例如:Linux系統內部的很多應用(有的是應用的一部分)都是使用Shell腳本開發的,因為有1000多個Linux系統命令為它做支撐,特別是Linux正則表達式及三劍客grep、sed、awk等命令。
對於一些常見的系統腳本使用Shell開發會更簡單、更快速,例如:讓軟體一鍵自動化安裝、優化,監控報警腳本,軟體啟動腳本,日誌分析腳本等,雖然PHP/Python語言也能夠做到這些,但是,考慮到掌握難度、開發效率、開發習慣等因素,它們可能就不如Shell腳本語言流行及有優勢了。對於一些常規的業務應用,使用Shell更符合Linux運維簡單、易用、高效的三大基本原則。
PHP語言的優勢在於小型網站系統的開發;Python語言的優勢在於開發較復雜的運維工具、Web界面的管理工具和Web業務的開發(例如:CMDB自動化運維平台、跳板機、批量管理軟體SaltStack、雲計算OpenStack軟體)等。我們在開發一個應用時應根據業務需求,結合不同語言的優勢及自身擅長的語言來選擇,揚長避短,從而達到高效開發及易於自身維護等目的。
❹ shell命令優化 小白寫了以下一段腳本,請問有哪位大神幫忙優化一下嗎
#!/bin/bash
file="/sys/class/backlight/intel_backlight/actual_brightness"
actualbrightness=`cat$file`
case$actualbrightnessin
[5432]1)value=$((actualbrightness-10));
echo$value>$file;;
[1234]2)value=$((actualbrightness+10));
echo$value>$file;;
11)echo12>$file;;
52)echo51>$file;;
*)exit0;;
esac
❺ 如何用shell腳本實現下列功能
樓上兩個真經典, 受教受教. 我菜鳥冒昧解釋解釋兩位的命令
cat log.txt| gawk -F'#| ' '{print $5}'|sort|uniq -c|gawk '{print $2,$1}'
-F'#| ' 利用#或者空格分隔, 第一次碰到學習了
sort 排序
uniq -c 合並重復, 統計個數
awk -F"[# ]" '{a[$5]=a[$5]"z"}END{for( i in a )print i"\n", length(a[i])}' temp.log
太nb了, 佩服佩服awk用的如此之嫻熟
-F"[# ]" 同樣用#或者空格分隔, 學習學習
a[$5]=a[$5] awk關聯數組, 太經典了, a[$5]用字元串做數組a的下標, 而字元串本身就是IP地址, =a[$5]"z"太nb了, 看了半天才明白, 數字內部保存的只是z, 如果遇到重復的下標只是保存了zz, NB呀高手. 後面結束的時候循環只是列印出來了下標i(IP地址), 而數組的內容實際上是a[i](也就是1個或者多個z), 然後用內置函數length取出來數字內有多少個z就是重復了幾次. 高!
厚顏無恥的補充一下排序加上sort就行了
awk -F"[# ]" '{a[$5]=a[$5]"z"}END{for( i in a )print i" ", length(a[i]) | "sort"}' datafile
to 樓上
謙虛謙虛了
看了優化命令
awk -F"#| " '{a[$5]++}END{for(i in a)print i"\n"a[i]}' temp.log 1>aaa.txt
不錯, 我又沒有想到!!! 直接自增1 不用length統計了直接列印. 太棒了
❻ 剛學shell腳本寫了個小 計算器,加減除都可以,乘法不行,哪兒錯了
你的問題在:elif [ $fangfa = " \* " ]; 這句並不能判斷到「*「乘號;
正確的結果如下:
#!/bin/bash
echo "first number"
read a
echo "fangfa"
read fangfa
echo "second number"
read b
if [ "$fangfa" = "+" ];then
echo $(($a+$b))
elif [ "$fangfa" = "-" ];then
echo $(($a-$b))
elif [ "$fangfa" = "*" ];then
echo $(($a*$b))
elif [ "$fangfa" = "/" ];then
echo $(($a/$b))
fi
===============================================
腳本優化版本:
#!/bin/bash
read -p "input first number: " num1
read -p "input operator: " operator
read -p "input second number: " num2
if [ "$operator" == "+" ];then
echo " num1 + num2 = $(($num1+$num2))"
elif [ "$operator" == "-" ];then
echo "num1 - num2 = $(($num1-$num2))"
elif [ "$operator" == "*" ];then
echo "num1 * num2 = $(($num1*$num2))"
elif [ "$operator" == "/" ];then
echo "num1 / num2 = $(($num1/$num2))"
fi
❼ shell腳本,獲取目錄的結構,保存到文件
使用遞歸的shell腳本沒有find效率高。find 是為目錄搜索而優化過的程序。
#!/bin/bash
DIR="$1"
if [ -z "$2"] ;then
echo "must set 2st argument for output file ." >& 2
exit 1
fi
OUT="$2"
DIR=$(readlink -m "$DIR")
#轉換成絕對路徑
find "$DIR" -type "d" >"$OUT"
#搜索目錄保存到輸出文件。
❽ 求大佬教我優化shell腳本
我有幾個數據,想讓它們跟某一個特定的數值進行差值計算,然後返回絕對值最大的那個。
比如說有
123
456
111
跟100差值計算
返回456
不知道怎麼寫 希望大佬帶
❾ shell腳本優化
能稍微給點 $TABLE 里的文本,還有想達到最終效果的文本樣式。
你是先寫10行$TABLE.xls 在刪10 然後在列印含有|的行重新寫進$TABLE.xls
是這意思嗎?
你直接-i 參數直接在文本里操作不行嗎?