linux bash shell

it2024-01-16  68

特殊变量:$?上一个命令执行状态的返回值。

  程序执行可能有两种返回值:   1. 程序执行结果   2. 程序状态返回吗(0-255)     0 则为执行正确     1-255 则执行出错(1,2,127系统预留);

  $#:获取当前shell命令行中参数的总个数   $*:获取当前shell的所有参数 “$1 $2 $3 …,受IFS控制   $@:这个程序的所有参数 “$1″ “$2″ “$3″ “…”,不受IFS控制   $0 获取当前执行的shell脚本的文件名   $n 获取当前执行的shell脚本的第n个参数值,n=1..9   $$ 获取当前shell的进程号(PID)   $! 执行上一个指令的PID

10进制转16进制:15 > 0xf

printf '%x\n' 15

16进制转10进制:0xf > 15

printf '%d\n' 0xF

/dev/null 文件

如果希望执行某个命令,但又不希望在屏幕上显示输出结果,那么可以将输出重定向到 /dev/null:

/dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。但是 /dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。

如果希望屏蔽 stdout 和 stderr,可以这样写:

$ command > /dev/null 2>&1

注意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。

这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。

array_name=(value1 value2 ... valuen)

读取数组

读取数组元素值的一般格式是:

${array_name[index]}

获取数组中的所有元素

使用@ 或 * 可以获取数组中的所有元素,例如:

#!/bin/bash my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "数组的元素为: ${my_array[*]}" echo "数组的元素为: ${my_array[@]}"

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

#!/bin/bash my_array[0]=A my_array[1]=B my_array[2]=C my_array[3]=D echo "数组元素个数为: ${#my_array[*]}" echo "数组元素个数为: ${#my_array[@]}"

 

shell数组时报错Syntax error: "(" unexpected

我们先看下/bin/sh,发现它被指向了dash,怎么解决呢,将它指向bash

sudo dpkg-reconfigure dash

example:

 循环读取txt文件内容

#!/bin/bash declare -i sum=0 declare -i a=0 declare -i b=0 declare -i c=$1 declare -i sc=0 declare -i fc=0 #for x in `seq 1 $[$num-$i]`;do for I in `seq 1 $c`;do #let sum+=$I #./lck.sh>log.txt ./ini_local.sh|tee log.txt cat log.txt >> log_s.txt echo " cat file whiel read line" #cat log.txt |while read line while read line do echo $line; if [ $a == 1 ] then if [[ $line == "serdes check finish" ]] then #let sc+=1 #sc = `expr $sc + 1` sc=$((${sc} + 1)) echo finish..... echo $sc else let fc+=1 echo $fc fi a=0 else a=0 fi if [[ $line == "serdes check start" ]] then # echo str1 == str3 a=1 echo start..... else # echo str1 != str3 a=0 fi done <log.txt wait ./reset_taishan_new.sh sleep 15m #20min done #echo "1-100 all positive integer's sum : $sum" echo "total:$I success:$sc fail:$fc"

 

最新回复(0)