@songying
2018-11-06T12:39:27.000000Z
字数 4745
阅读 1301
linux
echo "hello world!"echo 'hello world!' #变量替换在单引号中无用echo hello world #此时无法使用“;”,因为";"为命令界定符
echo -e "1\t2\t3" #-e 表接受双引号字符串内的转义序列作为参数# zsh中不需要添加 -e
设置文字颜色
#\e[1;31m :将颜色设为红色,\e[0m:将颜色重新置回echo -e "\e[1;31m This is red text \e[0m"#重置=0, 黑色=30, 红色=31, 绿色=32,#黄色=33, 蓝色=34, 洋红=35,青色=36, 白色=37
设置背景颜色
echo -e "\e[1;42m Green background \e[0m"#重置=0, 黑色=40, 红色=41, 绿色=42,#黄色=43, 蓝色=44, 洋红=45, 青色=46, 白色=47
#%-5s指明一个格式为左对齐且宽度为5的字符串替换。printf "%-5s, %-10s %-4s\n" No Name Mark
注意 : 在prinf的每行后都要有一个换行符\n.
pgrep gedit #获取gedit这个进程的进程ID#获取其运行时的环境变量,并将所有的\0换为\ncat /proc/$PID/environ | tr '\0' '\n'
var="value" #注意没有空格echo $varecho ${var}
#PATH常定义在/etc/environment 或/etc/profile或 ~/.bashrc中。export PATH="$PATH:/home/user/bin"
length=${#var} #获取变量值长度
echo $SHELL 或 echo $0
if [ $UID -ne 0 ]; then #root的UID是0echo Not root user.please run as root.elseecho Root userfi
prepend()函数:首先检查该函数第二个参数所指定的目录是否存在,
若存在,eval表达式将第一个参数所指定的变量值设置为第二个参数值+":",随后再跟上首个参数的值
#在.bashrc中添加prepend() { [ -d "$2" ] && eval $1=\"$2\$\{$1:+':'\$$1\}\" && export $1 ; }# shell参数扩展:${parameter:+expression}:若parameter不为空,则使用expression的值。prepend PATH /opt/myapp/binprepend LD_LIBRARY_PATH /opt/myapp/lib
no1=4; #赋值
#let变量名前不需要加$let result=no1+no2let no1++let no+=6
result=$[ no1 + no2 ]result=$[ $no1 + 5 ] #可加可不加$
result=$(( no1 + 50 ))result=$(( $no1 + 50 ))
result=`expr 3 + 4` #此处并非是单引号result=$(expr $no1 + 5)
result=`echo "$no * 1.5" | bc` # 此处并非是单引号
result=`echo "scale=2;3/8" | bc` #此处` `可换为$( )
#将十进制转换为二进制result=$(echo "obase=2;$no" | bc)#将人禁止转换为十进制result=$(echo "obase=10;ibase=2;$no" | bc)
result=`echo "sqrt(100)" | bc` # 计算平方根result=$(echo "10^10" | bc) #计算平方
> #将文本内容重定向到一个文件>> #将文本追加到目标文件中2> #将stderr重定向到一个文件cmd 2> stderr.txt 1> stdout.txt #将stderr,stdout定向到不同文件cmd &> output.txt #将stderr,stdout定向到同一文件cmd 2> /dev/null #将stderr信息销毁
alias new_command='command sequence' # 创建别名,此处是单引号
注意: alias别名的作用是暂时的,一旦关闭终端,所有别名设置将消失。若想永久修改,可更改.basgrc配置文件。
#!/bin/bashecho -e "Enter password: "stty -echo # -echo禁止将输出发送到终端。read passwordstty echoechoecho password read.
bash -x script.sh # -x:打印出所执行的每一行命令以及当前状态
#/bin/bashfor i in {1..6};doset -x #在执行时显示参数与命令echo $iset +x #禁止调试doneecho "Script executed"
#!/bin/bashfunction DEBUG(){# ”:“表示告诉shell不要进行任何操作[ "$_DEBUG" == "on" ] && $@ || :}for i in {1..10}do# 在给每一个需要打印调试信息的语句前面加上DEBUG。DEBUG echo $idone运行: _DEBUG=on ./script.sh
function fname(){ #定义函数//statement}fname ; #执行函数fname arg1 arg2 ; #传递参数
$1: 第一个参数$2: 第二个参数$n: 第n个参数$@: 扩展为"$1", "$2", "$3"$*: 扩展为"$1$2$3"
function1() {echo $1;function1 hello;sleep 1;}
#函数作用域可扩展到子进程中export -f function_name
command;echo $?; # $?是上一个命令的返回值,成功=0, 不成功=非0.
#!/bin/bash#command 中写入你要检测退出状态的目标命令CMD="command"$CMDif [ $? -eq 0 ]thenecho "$CMD executed successfully"elseecho "$CMD terminated unsuccessfully"fi
ls | cat -n > out.txt#子shellcmd_output=$(ls | cat -n)echo $cmd_output#反引用,此处不是单引号cmd_output=`ls | cat -n`echo $cmd_output
pwd;(cd /bin; ls); # ()来定义一个子shellpwd;
注意: 当命令在子shell中执行时,不会对当前shell有任何影响,所有的改变仅限于子shell内部。
# 通过将子shell放入到双引号中可保留空格和换行符。output="$(cat text.txt)"
#从标准输入中读取3个字符送入到var_name这个变量中。read -n 3 var_name
# 从标准输入中读取数据,但是不显示输入的数据,可用来读取密码read -s var_name
# 显示提示信息,并将输入的数据吸入到变量中read -p "Enter input:" var
#在十秒内将输入写到变量中read -t 10 var
# 输入中一旦遇到:就停止输入,并将输入写入变量中。read -d ":" var
#该命令每30秒运行一次。repeat(){while :; do $@ && return; sleep 30; done}repeat wegt -c ......
IFS是存储定界符的环境变量,是shell环境中使用的默认定界符。其默认值时空白字符,包括:换行符,制表符, 空格。
data="name,sex,rollno,location"oldIFS=IFSIFS=, #将定界符设置为逗号for item in $data;doecho Item: $itemdoneIFS=oldIFS
#!/bin/bashline="root:x:0:0:root:/root:/bin/bash"oldIFS=$IFS;IFS=":"count=0for item in $line;do[ $count -eq 0 ] && user=$item;[ $count -eq 6 ] && shell=$item;let count++doneIFS=$oldIFSecho "$user\'s shell is $shell;"
# list可以是一个字符串,也可以时一个序列,注意此处的condition有逗号结尾for var in list;docomands;done# 序列: {1..50}, {a..z}, {A..Z}
# true,可实现无限循环,注意此处的condition有逗号结尾while condition;docommands;done
# 注意此处的condition有逗号结尾.until [ $x -eq 9];dolet x++;echo $x;done
if condition;thencommands;elsecommands;fi
[ condition ] && action; #若condition为真,则执行action[ condition ] || action; #若condition为假,则执行action
注意: 一定在[ 或 ] 与操作数之间有一个空格
[ var -eq 0 ] # 当 $var等于0时,返回真。[ var -eq 0 ] # 当 $var不为0时,返回假-gt :大于-lt :小于-ge :大于或等于-le :小于或等于[ $var1 -ne 0 -a $var2 -gt 2 ] #逻辑与-a,而不可用&&与&[ $var1 -ne 0 -o $var2 -gt 2 ] #逻辑或 -o,而不可用|| 与 |
[ -f $var ] #若变量包含正常的文件路径或文件名,返回真[ -x $var ] #变量包含的文件可执行,返回真[ -d $var ] #变量包含的是目录,返回真[ -w $var ] #变量包含的文件可写,返回真[ -r $var ] #变量包含的文件可读, 返回真[ -L $var ] #变量包含的是一个符号链接,返回真[ -e $var ] #变量包含的文件存在,返回真。[ -c $var ] #变量包含的是一个字符设备文件路径,返回真[ -b $var ] #变量包含的是一个块设备文件路径,返回真
